[MKISOFS]
[reactos.git] / reactos / sdk / tools / mkisofs / schilytools / libschily / gettimeofday.c
diff --git a/reactos/sdk/tools/mkisofs/schilytools/libschily/gettimeofday.c b/reactos/sdk/tools/mkisofs/schilytools/libschily/gettimeofday.c
new file mode 100644 (file)
index 0000000..d1d454f
--- /dev/null
@@ -0,0 +1,89 @@
+/* @(#)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) */