diff 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
line wrap: on
line diff
--- a/src/server.c	Sat May 13 09:28:09 2000 +0100
+++ b/src/server.c	Sat May 13 10:25:28 2000 +0100
@@ -1,7 +1,7 @@
 /*
   server.c
 
-  $Id: server.c 70 2000-05-12 17:35:00Z enz $
+  $Id: server.c 75 2000-05-13 09:25:28Z enz $
 */
 
 #if HAVE_CONFIG_H
@@ -22,6 +22,7 @@
 #include <stdio.h>
 #include "server.h"
 #include <ctype.h>
+#include <errno.h>
 #include <signal.h>
 #include <stdarg.h>
 #include <sys/types.h>
@@ -787,12 +788,24 @@
     return TRUE;
 }
 
-static unsigned long
-getTimeInSeconds( unsigned int year, unsigned int mon, unsigned int day,
-                  unsigned int hour, unsigned int min, unsigned int sec )
+/* Can return -1, if date is outside the range of time_t. */
+static time_t
+getTimeInSeconds( int year, int mon, int day, int hour, int min, int sec )
 {
     struct tm t;
+    time_t result;
 
+    ASSERT( year >= 1900 );
+    ASSERT( mon >= 1 );
+    ASSERT( mon <= 12 );
+    ASSERT( day >= 1 );
+    ASSERT( day <= 31 );
+    ASSERT( hour >= 0 );
+    ASSERT( hour <= 23 );
+    ASSERT( min >= 0 );
+    ASSERT( min <= 59 );
+    ASSERT( sec >= 0 );
+    ASSERT( sec <= 59 );
     memset( &t, 0, sizeof( t ) );
     t.tm_year = year - 1900;
     t.tm_mon = mon - 1;
@@ -800,15 +813,16 @@
     t.tm_hour = hour;
     t.tm_min = min;
     t.tm_sec = sec;
-    return mktime( &t );
+    result = mktime( &t );
+    return result;
 }
 
 
 static Bool
 doNewgrps( char *arg, const Cmd *cmd )
 {
-    time_t t, now, lastUpdate;
-    unsigned int year, mon, day, hour, min, sec, cent, len;
+    time_t t, now, lastUpdate, nextCentBegin;
+    int year, mon, day, hour, min, sec, cent, len;
     const char *g;
     Str date, timeofday, file;
 
@@ -821,19 +835,24 @@
     switch ( len )
     {
     case 6:
-        if ( sscanf( date, "%2u%2u%2u", &year, &mon, &day ) != 3 )
+        if ( sscanf( date, "%2d%2d%2d", &year, &mon, &day ) != 3 )
         {
             putSyntax( cmd );
             return TRUE;
         }
         now = time( NULL );
         cent = 1900;
-        while ( now > getTimeInSeconds( cent + 100, 1, 1, 0, 0, 0 ) )
+        nextCentBegin = getTimeInSeconds( cent + 100, 1, 1, 0, 0, 0 );
+        while ( nextCentBegin != (time_t)-1 && now != (time_t)-1 
+                && now > nextCentBegin )
+        {
             cent += 100;
+            nextCentBegin = getTimeInSeconds( cent + 100, 1, 1, 0, 0, 0 );
+        }
         year += cent;
         break;
     case 8:
-        if ( sscanf( date, "%4u%2u%2u", &year, &mon, &day ) != 3 )
+        if ( sscanf( date, "%4d%2d%2d", &year, &mon, &day ) != 3 )
         {
             putSyntax( cmd );
             return TRUE;
@@ -843,13 +862,14 @@
         putSyntax( cmd );
         return TRUE;
     }
-    if ( sscanf( timeofday, "%2u%2u%2u", &hour, &min, &sec ) != 3 )
+    if ( sscanf( timeofday, "%2d%2d%2d", &hour, &min, &sec ) != 3 )
     {
         putSyntax( cmd );
         return TRUE;
     }
-    if ( year < 1970 || mon == 0 || mon > 12 || day == 0 || day > 31
-         || hour > 23 || min > 59 || sec > 60 )
+    if ( year < 1970 || mon < 1 || mon > 12 || day < 1 || day > 31
+         || hour < 0 || hour > 23 || min < 0 || min > 59
+         || sec < 0 || sec > 60 )
     {
         putSyntax( cmd );
         return TRUE;
@@ -858,7 +878,8 @@
     t = getTimeInSeconds( year, mon, day, hour, min, sec );
     putStat( STAT_NEW_GRP_FOLLOW, "New groups since %s", arg );
 
-    if ( ! Utl_getStamp( &lastUpdate, file ) || t <= lastUpdate )
+    if ( ! Utl_getStamp( &lastUpdate, file )
+         || t == (time_t)-1 || t <= lastUpdate )
     {
         if ( Grp_firstGrp( &g ) )
             do