reactos/sdk/tools/mkisofs/schilytools/libschily/gettimeofday.c

90 lines
2.1 KiB
C
Raw Normal View History

/* @(#)gettimeofday.c 1.9 12/11/29 Copyright 2007-2012 J. Schilling */
#include <schily/mconfig.h>
#ifndef lint
static UConst char sccsid[] =
"@(#)gettimeofday.c 1.9 12/11/29 Copyright 2007-2012 J. Schilling";
#endif
/*
* Emulate gettimeofday where it does not exist
*
* Copyright (c) 2007-2012 J. Schilling
*/
/*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* See the file CDDL.Schily.txt in this distribution for details.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file CDDL.Schily.txt from this distribution.
*/
#if !defined(HAVE_GETTIMEOFDAY)
#if (defined(_MSC_VER) || defined(__MINGW32__))
#include <schily/windows.h>
#include <schily/time.h>
#include <schily/utypes.h>
#include <schily/standard.h>
#ifdef _MSC_VER
const __int64 MS_FTIME_ADD = 0x2b6109100i64;
const __int64 MS_FTIME_SECS = 10000000i64;
#else
const Int64_t MS_FTIME_ADD = 0x2b6109100LL;
const Int64_t MS_FTIME_SECS = 10000000LL;
#endif
EXPORT int
gettimeofday(tp, dummy)
struct timeval *tp;
void *dummy; /* tzp is unspecified by POSIX */
{
FILETIME ft;
Int64_t T;
if (tp == 0)
return (0);
GetSystemTimeAsFileTime(&ft); /* 100ns time since 1601 */
T = ft.dwHighDateTime;
T <<= 32;
T += ft.dwLowDateTime;
/*
* Cast to avoid a loss of data warning
* MSVC uses long instead of time_t for tv_sec
*/
tp->tv_sec = (long) (T / MS_FTIME_SECS - MS_FTIME_ADD);
tp->tv_usec = (long) (T % MS_FTIME_SECS) / 10;
return (0);
}
#else /* (defined(_MSC_VER) || defined(__MINGW32__)) */
#ifdef HAVE_TIME
#include <schily/time.h>
#include <schily/standard.h>
EXPORT int
gettimeofday(tp, dummy)
struct timeval *tp;
void *dummy; /* tzp is unspecified by POSIX */
{
time_t t;
if (tp == 0)
return (0);
(void) time(&t);
tp->tv_sec = t;
tp->tv_usec = 0;
return (0);
}
#endif
#endif /* (defined(_MSC_VER) || defined(__MINGW32__)) */
#endif /* !defined(HAVE_GETTIMEOFDAY) */