diff options
-rw-r--r-- | source4/lib/basic.mk | 3 | ||||
-rw-r--r-- | source4/lib/replace.c | 33 | ||||
-rw-r--r-- | source4/lib/time.c | 33 |
3 files changed, 35 insertions, 34 deletions
diff --git a/source4/lib/basic.mk b/source4/lib/basic.mk index c7d3a264d2..56fc19dca7 100644 --- a/source4/lib/basic.mk +++ b/source4/lib/basic.mk @@ -4,6 +4,8 @@ # Start SUBSYSTEM LIBREPLACE [SUBSYSTEM::LIBREPLACE] INIT_OBJ_FILES = lib/replace.o +ADD_OBJ_FILES = \ + lib/snprintf.o # End SUBSYSTEM LIBREPLACE ############################## @@ -23,7 +25,6 @@ ADD_OBJ_FILES = \ lib/time.o \ lib/genrand.o \ lib/username.o \ - lib/snprintf.o \ lib/dprintf.o \ lib/xfile.o \ lib/wins_srv.o \ diff --git a/source4/lib/replace.c b/source4/lib/replace.c index f3a0df6ef6..4ed99c833c 100644 --- a/source4/lib/replace.c +++ b/source4/lib/replace.c @@ -427,6 +427,39 @@ char *rep_inet_ntoa(struct in_addr ip) #endif /* HAVE_SYSLOG */ #endif /* HAVE_VSYSLOG */ +/******************************************************************* +yield the difference between *A and *B, in seconds, ignoring leap seconds +********************************************************************/ +static int tm_diff(struct tm *a, struct tm *b) +{ + int ay = a->tm_year + (1900 - 1); + int by = b->tm_year + (1900 - 1); + int intervening_leap_days = + (ay/4 - by/4) - (ay/100 - by/100) + (ay/400 - by/400); + int years = ay - by; + int days = 365*years + intervening_leap_days + (a->tm_yday - b->tm_yday); + int hours = 24*days + (a->tm_hour - b->tm_hour); + int minutes = 60*hours + (a->tm_min - b->tm_min); + int seconds = 60*minutes + (a->tm_sec - b->tm_sec); + + return seconds; +} + +/******************************************************************* + return the UTC offset in seconds west of UTC, or 0 if it cannot be determined + ******************************************************************/ +int get_time_zone(time_t t) +{ + struct tm *tm = gmtime(&t); + struct tm tm_utc; + if (!tm) + return 0; + tm_utc = *tm; + tm = localtime(&t); + if (!tm) + return 0; + return tm_diff(&tm_utc,tm); +} #ifndef HAVE_TIMEGM /* diff --git a/source4/lib/time.c b/source4/lib/time.c index fec4dd62a2..3ca7be5540 100644 --- a/source4/lib/time.c +++ b/source4/lib/time.c @@ -49,39 +49,6 @@ void GetTimeOfDay(struct timeval *tval) #endif } -/******************************************************************* -yield the difference between *A and *B, in seconds, ignoring leap seconds -********************************************************************/ -static int tm_diff(struct tm *a, struct tm *b) -{ - int ay = a->tm_year + (1900 - 1); - int by = b->tm_year + (1900 - 1); - int intervening_leap_days = - (ay/4 - by/4) - (ay/100 - by/100) + (ay/400 - by/400); - int years = ay - by; - int days = 365*years + intervening_leap_days + (a->tm_yday - b->tm_yday); - int hours = 24*days + (a->tm_hour - b->tm_hour); - int minutes = 60*hours + (a->tm_min - b->tm_min); - int seconds = 60*minutes + (a->tm_sec - b->tm_sec); - - return seconds; -} - -/******************************************************************* - return the UTC offset in seconds west of UTC, or 0 if it cannot be determined - ******************************************************************/ -int get_time_zone(time_t t) -{ - struct tm *tm = gmtime(&t); - struct tm tm_utc; - if (!tm) - return 0; - tm_utc = *tm; - tm = localtime(&t); - if (!tm) - return 0; - return tm_diff(&tm_utc,tm); -} #define TIME_FIXUP_CONSTANT 11644473600LL |