mirror of
https://github.com/reactos/reactos.git
synced 2024-11-20 06:15:26 +00:00
90 lines
2.1 KiB
C
90 lines
2.1 KiB
C
|
/* @(#)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) */
|