#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
****************************************************************************/
time_t nt_time_to_unix(NTTIME nt)
{
+ if (nt == 0) {
+ return 0;
+ }
+ if (nt == -1LL) {
+ return (time_t)-1;
+ }
nt += 1000*1000*10/2;
nt /= 1000*1000*10;
nt -= TIME_FIXUP_CONSTANT;
/****************************************************************************
-check if it's a null mtime
+check if it's a null unix time
****************************************************************************/
-BOOL null_mtime(time_t mtime)
+BOOL null_time(time_t t)
{
- return mtime == 0 ||
- mtime == (time_t)0xFFFFFFFF ||
- mtime == (time_t)-1;
+ return t == 0 ||
+ t == (time_t)0xFFFFFFFF ||
+ t == (time_t)-1;
}
/*******************************************************************
static uint16_t make_dos_date1(struct tm *t)
{
uint16_t ret=0;
- ret = (((unsigned)(t->tm_mon+1)) >> 3) | ((t->tm_year-80) << 1);
+ ret = (((uint_t)(t->tm_mon+1)) >> 3) | ((t->tm_year-80) << 1);
ret = ((ret&0xFF)<<8) | (t->tm_mday | (((t->tm_mon+1) & 0x7) << 5));
return ret;
}
static uint16_t make_dos_time1(struct tm *t)
{
uint16_t ret=0;
- ret = ((((unsigned)t->tm_min >> 3)&0x7) | (((unsigned)t->tm_hour) << 3));
+ ret = ((((uint_t)t->tm_min >> 3)&0x7) | (((uint_t)t->tm_hour) << 3));
ret = ((ret&0xFF)<<8) | ((t->tm_sec/2) | ((t->tm_min & 0x7) << 5));
return ret;
}
********************************************************************/
void push_dos_date3(char *buf,int offset,time_t unixdate, int zone_offset)
{
- if (!null_mtime(unixdate)) {
+ if (!null_time(unixdate)) {
unixdate -= zone_offset;
}
SIVAL(buf,offset,unixdate);
time_t pull_dos_date3(const uint8_t *date_ptr, int zone_offset)
{
time_t t = (time_t)IVAL(date_ptr,0);
- if (!null_mtime(t)) {
+ if (!null_time(t)) {
t += zone_offset;
}
return t;
tm->tm_sec);
}
-
+/*
+ a hack to move the stupid gcc strftime warning to one place - see manual page
+*/
+#ifdef HAVE_STRFTIME
+size_t sys_strftime(char *s, size_t max, const char *fmt, const struct tm *tm)
+{
+ return strftime(s, max, fmt, tm);
+}
+#endif
/****************************************************************************
Return the date and time as a string
in the gcc warning, not a bug in this code. See a recent
strftime() manual page for details.
*/
- strftime(tempTime,sizeof(tempTime)-1,"%c %Z",tm);
+ sys_strftime(tempTime,sizeof(tempTime)-1,"%c %Z",tm);
TimeBuf = talloc_strdup(mem_ctx, tempTime);
#else
TimeBuf = talloc_strdup(mem_ctx, asctime(tm));
{
return strtoull(s, NULL, 0);
}
+
+int64_t usec_time_diff(struct timeval *larget, struct timeval *smallt)
+{
+ int64_t sec_diff = larget->tv_sec - smallt->tv_sec;
+ return (sec_diff * 1000000) + (int64_t)(larget->tv_usec - smallt->tv_usec);
+}
+