Fix from richard.kettlewell@kewill.com for leapyear bugs.
[ira/wip.git] / source3 / lib / replace.c
index b4fea3dc313de84379e512ced4195b76cf01f3e0..b0adb72fd24ea4b564e00430bc34d18bd1b87660 100644 (file)
 
 extern int DEBUGLEVEL;
 
-
- void replace_dummy(void) 
-{}
+ void replace_dummy(void);
+ void replace_dummy(void) {}
 
 
 #ifndef HAVE_FTRUNCATE
  /*******************************************************************
 ftruncate for operating systems that don't have it
 ********************************************************************/
- int ftruncate(int f,long l)
+ int ftruncate(int f,SMB_OFF_T l)
 {
       struct  flock   fl;
 
@@ -49,7 +48,9 @@ ftruncate for operating systems that don't have it
 /*******************************************************************
 a mktime() replacement for those who don't have it - contributed by 
 C.A. Lademann <cal@zls.com>
+Corrections by richard.kettlewell@kewill.com
 ********************************************************************/
+
 #define  MINUTE  60
 #define  HOUR    60*MINUTE
 #define  DAY             24*HOUR
@@ -58,14 +59,16 @@ C.A. Lademann <cal@zls.com>
 {
   struct tm       *u;
   time_t  epoch = 0;
+  int n;
   int             mon [] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
   y, m, i;
 
   if(t->tm_year < 70)
     return((time_t)-1);
 
+  n = t->tm_year + 1900 - 1;
   epoch = (t->tm_year - 70) * YEAR + 
-    (t->tm_year / 4 - 70 / 4 - t->tm_year / 100) * DAY;
+    ((n / 4 - n / 100 + n / 400) - (1969 / 4 - 1969 / 100 + 1969 / 400)) * DAY;
 
   y = t->tm_year;
   m = 0;
@@ -281,7 +284,7 @@ duplicate a string
 #ifdef REPLACE_INET_NTOA
 char *rep_inet_ntoa(struct in_addr ip)
 {
-       unsigned char *p = (unsigned char *)ip.s_addr;
+       unsigned char *p = (unsigned char *)&ip.s_addr;
        static char buf[18];
 #if WORDS_BIGENDIAN
        slprintf(buf, 17, "%d.%d.%d.%d", 
@@ -293,3 +296,4 @@ char *rep_inet_ntoa(struct in_addr ip)
        return buf;
 }
 #endif
+