Mercurial > noffle
comparison src/server.c @ 69:21e778b6c3e9 noffle
[svn] Rewrote getTimesInSeconds(): arguments ar now int and
checked with assertions. Return value is time_t and must be checked
for (time_t)-1.
author | enz |
---|---|
date | Sat, 13 May 2000 10:25:28 +0100 |
parents | 7250be163ec4 |
children | c7df2cc65cc1 |
comparison
equal
deleted
inserted
replaced
68:f76e8586fab6 | 69:21e778b6c3e9 |
---|---|
1 /* | 1 /* |
2 server.c | 2 server.c |
3 | 3 |
4 $Id: server.c 70 2000-05-12 17:35:00Z enz $ | 4 $Id: server.c 75 2000-05-13 09:25:28Z enz $ |
5 */ | 5 */ |
6 | 6 |
7 #if HAVE_CONFIG_H | 7 #if HAVE_CONFIG_H |
8 #include <config.h> | 8 #include <config.h> |
9 #endif | 9 #endif |
20 #endif | 20 #endif |
21 | 21 |
22 #include <stdio.h> | 22 #include <stdio.h> |
23 #include "server.h" | 23 #include "server.h" |
24 #include <ctype.h> | 24 #include <ctype.h> |
25 #include <errno.h> | |
25 #include <signal.h> | 26 #include <signal.h> |
26 #include <stdarg.h> | 27 #include <stdarg.h> |
27 #include <sys/types.h> | 28 #include <sys/types.h> |
28 #include <unistd.h> | 29 #include <unistd.h> |
29 #include "client.h" | 30 #include "client.h" |
785 { | 786 { |
786 putStat( STAT_READY_POST_ALLOW, "Ok" ); | 787 putStat( STAT_READY_POST_ALLOW, "Ok" ); |
787 return TRUE; | 788 return TRUE; |
788 } | 789 } |
789 | 790 |
790 static unsigned long | 791 /* Can return -1, if date is outside the range of time_t. */ |
791 getTimeInSeconds( unsigned int year, unsigned int mon, unsigned int day, | 792 static time_t |
792 unsigned int hour, unsigned int min, unsigned int sec ) | 793 getTimeInSeconds( int year, int mon, int day, int hour, int min, int sec ) |
793 { | 794 { |
794 struct tm t; | 795 struct tm t; |
795 | 796 time_t result; |
797 | |
798 ASSERT( year >= 1900 ); | |
799 ASSERT( mon >= 1 ); | |
800 ASSERT( mon <= 12 ); | |
801 ASSERT( day >= 1 ); | |
802 ASSERT( day <= 31 ); | |
803 ASSERT( hour >= 0 ); | |
804 ASSERT( hour <= 23 ); | |
805 ASSERT( min >= 0 ); | |
806 ASSERT( min <= 59 ); | |
807 ASSERT( sec >= 0 ); | |
808 ASSERT( sec <= 59 ); | |
796 memset( &t, 0, sizeof( t ) ); | 809 memset( &t, 0, sizeof( t ) ); |
797 t.tm_year = year - 1900; | 810 t.tm_year = year - 1900; |
798 t.tm_mon = mon - 1; | 811 t.tm_mon = mon - 1; |
799 t.tm_mday = day; | 812 t.tm_mday = day; |
800 t.tm_hour = hour; | 813 t.tm_hour = hour; |
801 t.tm_min = min; | 814 t.tm_min = min; |
802 t.tm_sec = sec; | 815 t.tm_sec = sec; |
803 return mktime( &t ); | 816 result = mktime( &t ); |
817 return result; | |
804 } | 818 } |
805 | 819 |
806 | 820 |
807 static Bool | 821 static Bool |
808 doNewgrps( char *arg, const Cmd *cmd ) | 822 doNewgrps( char *arg, const Cmd *cmd ) |
809 { | 823 { |
810 time_t t, now, lastUpdate; | 824 time_t t, now, lastUpdate, nextCentBegin; |
811 unsigned int year, mon, day, hour, min, sec, cent, len; | 825 int year, mon, day, hour, min, sec, cent, len; |
812 const char *g; | 826 const char *g; |
813 Str date, timeofday, file; | 827 Str date, timeofday, file; |
814 | 828 |
815 if ( sscanf( arg, "%s %s", date, timeofday ) != 2 ) | 829 if ( sscanf( arg, "%s %s", date, timeofday ) != 2 ) |
816 { | 830 { |
819 } | 833 } |
820 len = strlen( date ); | 834 len = strlen( date ); |
821 switch ( len ) | 835 switch ( len ) |
822 { | 836 { |
823 case 6: | 837 case 6: |
824 if ( sscanf( date, "%2u%2u%2u", &year, &mon, &day ) != 3 ) | 838 if ( sscanf( date, "%2d%2d%2d", &year, &mon, &day ) != 3 ) |
825 { | 839 { |
826 putSyntax( cmd ); | 840 putSyntax( cmd ); |
827 return TRUE; | 841 return TRUE; |
828 } | 842 } |
829 now = time( NULL ); | 843 now = time( NULL ); |
830 cent = 1900; | 844 cent = 1900; |
831 while ( now > getTimeInSeconds( cent + 100, 1, 1, 0, 0, 0 ) ) | 845 nextCentBegin = getTimeInSeconds( cent + 100, 1, 1, 0, 0, 0 ); |
846 while ( nextCentBegin != (time_t)-1 && now != (time_t)-1 | |
847 && now > nextCentBegin ) | |
848 { | |
832 cent += 100; | 849 cent += 100; |
850 nextCentBegin = getTimeInSeconds( cent + 100, 1, 1, 0, 0, 0 ); | |
851 } | |
833 year += cent; | 852 year += cent; |
834 break; | 853 break; |
835 case 8: | 854 case 8: |
836 if ( sscanf( date, "%4u%2u%2u", &year, &mon, &day ) != 3 ) | 855 if ( sscanf( date, "%4d%2d%2d", &year, &mon, &day ) != 3 ) |
837 { | 856 { |
838 putSyntax( cmd ); | 857 putSyntax( cmd ); |
839 return TRUE; | 858 return TRUE; |
840 } | 859 } |
841 break; | 860 break; |
842 default: | 861 default: |
843 putSyntax( cmd ); | 862 putSyntax( cmd ); |
844 return TRUE; | 863 return TRUE; |
845 } | 864 } |
846 if ( sscanf( timeofday, "%2u%2u%2u", &hour, &min, &sec ) != 3 ) | 865 if ( sscanf( timeofday, "%2d%2d%2d", &hour, &min, &sec ) != 3 ) |
847 { | 866 { |
848 putSyntax( cmd ); | 867 putSyntax( cmd ); |
849 return TRUE; | 868 return TRUE; |
850 } | 869 } |
851 if ( year < 1970 || mon == 0 || mon > 12 || day == 0 || day > 31 | 870 if ( year < 1970 || mon < 1 || mon > 12 || day < 1 || day > 31 |
852 || hour > 23 || min > 59 || sec > 60 ) | 871 || hour < 0 || hour > 23 || min < 0 || min > 59 |
872 || sec < 0 || sec > 60 ) | |
853 { | 873 { |
854 putSyntax( cmd ); | 874 putSyntax( cmd ); |
855 return TRUE; | 875 return TRUE; |
856 } | 876 } |
857 snprintf( file, MAXCHAR, "%s/groupinfo.lastupdate", Cfg_spoolDir() ); | 877 snprintf( file, MAXCHAR, "%s/groupinfo.lastupdate", Cfg_spoolDir() ); |
858 t = getTimeInSeconds( year, mon, day, hour, min, sec ); | 878 t = getTimeInSeconds( year, mon, day, hour, min, sec ); |
859 putStat( STAT_NEW_GRP_FOLLOW, "New groups since %s", arg ); | 879 putStat( STAT_NEW_GRP_FOLLOW, "New groups since %s", arg ); |
860 | 880 |
861 if ( ! Utl_getStamp( &lastUpdate, file ) || t <= lastUpdate ) | 881 if ( ! Utl_getStamp( &lastUpdate, file ) |
882 || t == (time_t)-1 || t <= lastUpdate ) | |
862 { | 883 { |
863 if ( Grp_firstGrp( &g ) ) | 884 if ( Grp_firstGrp( &g ) ) |
864 do | 885 do |
865 if ( Grp_created( g ) > t ) | 886 if ( Grp_created( g ) > t ) |
866 putGrp( g ); | 887 putGrp( g ); |