r15953: our timegm() replacement still doesn't work, so grab the one from
authorAndrew Tridgell <tridge@samba.org>
Tue, 30 May 2006 05:57:43 +0000 (05:57 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:08:44 +0000 (14:08 -0500)
Heimdal which does work. This should fix most of the rest of the
failures on solaris
(This used to be commit acfaa98b5ea686feb81350baf09b3f4480f96edc)

source4/lib/replace/config.mk
source4/lib/replace/replace.c
source4/lib/replace/replace.h
source4/lib/replace/timegm.c [moved from source4/heimdal/lib/asn1/timegm.c with 71% similarity]

index 4fd5402f612e7728f07d53c6facc9764172dd59d..7ec1eaffa23b8b39bdb77bf9eae9fc282296c7a9 100644 (file)
@@ -11,6 +11,7 @@ OBJ_FILES = \
 [SUBSYSTEM::LIBREPLACE]
 OBJ_FILES = replace.o \
                snprintf.o \
+               timegm.o \
                dlfcn.o \
                getpass.o
 PUBLIC_DEPENDENCIES = REPLACE_READDIR
index 38a3d517df81c460873ef5ce68692fd8ae164234..6f51bd2e99aad0ad8779cf43c2954c73cb89879c 100644 (file)
@@ -368,19 +368,6 @@ duplicate a string
 #endif /* HAVE_VSYSLOG */
 
 
-#ifndef HAVE_TIMEGM
-/*
-  yes, I know this looks insane, but its really needed. The function in the 
-  Linux timegm() manpage does not work on solaris.
-*/
- time_t timegm(struct tm *tm) 
-{
-       time_t t = mktime(tm);
-       t -= mktime(gmtime(&t)) - (int)mktime(localtime(&t));
-       return t;
-}
-#endif
-
 #ifndef HAVE_SETENV
  int setenv(const char *name, const char *value, int overwrite) 
 {
index 7a1c4b5ce70c5fafc505c0c4e0de2ca7421a75a9..f9d67fb2ec98c982b2e7f9a04c6aec2511b79009 100644 (file)
@@ -112,6 +112,10 @@ int vasprintf(char **ptr, const char *format, va_list ap);
 #define bzero(a,b) memset((a),'\0',(b))
 #endif
 
+#ifndef HAVE_TIMEGM
+time_t timegm(struct tm *tm);
+#endif
+
 #ifndef PRINTF_ATTRIBUTE
 #if __GNUC__ >= 3
 /** Use gcc attribute to check printf fns.  a1 is the 1-based index of
similarity index 71%
rename from source4/heimdal/lib/asn1/timegm.c
rename to source4/lib/replace/timegm.c
index bdc997fa44601371b58eabecaca32850d1727e26..f2741e0effa1d88face685ee386d73f33ef80134 100644 (file)
  * SUCH DAMAGE. 
  */
 
-#include "der_locl.h"
+/*
+  adapted for Samba4 by Andrew Tridgell
+*/
 
-RCSID("$Id: timegm.c,v 1.7 1999/12/02 17:05:02 joda Exp $");
+#include "includes.h"
+#include "system/time.h"
 
 #ifndef HAVE_TIMEGM
 
-static int
-is_leap(unsigned y)
+static int is_leap(unsigned y)
 {
-    y += 1900;
-    return (y % 4) == 0 && ((y % 100) != 0 || (y % 400) == 0);
+       y += 1900;
+       return (y % 4) == 0 && ((y % 100) != 0 || (y % 400) == 0);
 }
 
-time_t
-timegm (struct tm *tm)
+time_t timegm(struct tm *tm)
 {
-  static const unsigned ndays[2][12] ={
-    {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
-    {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
-  time_t res = 0;
-  unsigned i;
-
-  for (i = 70; i < tm->tm_year; ++i)
-    res += is_leap(i) ? 366 : 365;
-
-  for (i = 0; i < tm->tm_mon; ++i)
-    res += ndays[is_leap(tm->tm_year)][i];
-  res += tm->tm_mday - 1;
-  res *= 24;
-  res += tm->tm_hour;
-  res *= 60;
-  res += tm->tm_min;
-  res *= 60;
-  res += tm->tm_sec;
-  return res;
+       static const unsigned ndays[2][12] ={
+               {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
+               {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
+       time_t res = 0;
+       unsigned i;
+       
+       for (i = 70; i < tm->tm_year; ++i)
+               res += is_leap(i) ? 366 : 365;
+       
+       for (i = 0; i < tm->tm_mon; ++i)
+               res += ndays[is_leap(tm->tm_year)][i];
+       res += tm->tm_mday - 1;
+       res *= 24;
+       res += tm->tm_hour;
+       res *= 60;
+       res += tm->tm_min;
+       res *= 60;
+       res += tm->tm_sec;
+       return res;
 }
 
 #endif /* HAVE_TIMEGM */