mirror of
https://github.com/samba-team/samba.git
synced 2025-12-05 12:23:50 +03:00
r10438: Move portability functions to lib/replace/; replace now simply ensures
that a given set of (working) POSIX functions are available (without prefixes to their names, etc). See lib/replace/README for a list. Functions that behave different from their POSIX specification (such as sys_select, sys_read, etc) have kept the sys_ prefix.
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
f1688a8066
commit
29919a7105
@@ -594,3 +594,37 @@ NTTIME timeval_to_nttime(const struct timeval *tv)
|
||||
return 10*(tv->tv_usec +
|
||||
((TIME_FIXUP_CONSTANT + (uint64_t)tv->tv_sec) * 1000000));
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user