Piotr Caban : ucrtbase: Add _timespec{32,64}_get implementation.
Alexandre Julliard
julliard at winehq.org
Tue Jun 26 04:44:29 CDT 2018
Module: wine
Branch: stable
Commit: 7e369abf1896b149bb1ca1b88c2f5c9d3d986235
URL: https://source.winehq.org/git/wine.git/?a=commit;h=7e369abf1896b149bb1ca1b88c2f5c9d3d986235
Author: Piotr Caban <piotr at codeweavers.com>
Date: Wed Apr 18 20:38:18 2018 +0200
ucrtbase: Add _timespec{32,64}_get implementation.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 7a50abd8949c47fd35c68358ba07336ed5f1c5eb)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
.../api-ms-win-crt-time-l1-1-0.spec | 4 +-
dlls/msvcrt/time.c | 53 ++++++++++++++++++++++
dlls/ucrtbase/ucrtbase.spec | 4 +-
3 files changed, 57 insertions(+), 4 deletions(-)
diff --git a/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec b/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec
index db36c29..e21e07e 100644
--- a/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec
+++ b/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec
@@ -47,8 +47,8 @@
@ cdecl _strtime_s(ptr long) ucrtbase._strtime_s
@ cdecl _time32(ptr) ucrtbase._time32
@ cdecl _time64(ptr) ucrtbase._time64
-@ stub _timespec32_get
-@ stub _timespec64_get
+@ cdecl _timespec32_get(ptr long) ucrtbase._timespec32_get
+@ cdecl _timespec64_get(ptr long) ucrtbase._timespec64_get
@ cdecl _tzset() ucrtbase._tzset
@ cdecl _utime32(str ptr) ucrtbase._utime32
@ cdecl _utime64(str ptr) ucrtbase._utime64
diff --git a/dlls/msvcrt/time.c b/dlls/msvcrt/time.c
index b7b76af..9e62c9f 100644
--- a/dlls/msvcrt/time.c
+++ b/dlls/msvcrt/time.c
@@ -1613,3 +1613,56 @@ int CDECL _get_daylight(int *hours)
}
#endif /* _MSVCR_VER >= 80 */
+
+#if _MSVCR_VER >= 140
+
+#define TIME_UTC 1
+
+struct _timespec32
+{
+ MSVCRT___time32_t tv_sec;
+ LONG tv_nsec;
+};
+
+struct _timespec64
+{
+ MSVCRT___time64_t tv_sec;
+ LONG tv_nsec;
+};
+
+/*********************************************************************
+ * _timespec64_get (UCRTBASE.@)
+ */
+int CDECL _timespec64_get(struct _timespec64 *ts, int base)
+{
+ ULONGLONG time;
+ FILETIME ft;
+
+ if(!MSVCRT_CHECK_PMT(ts != NULL)) return 0;
+ if(base != TIME_UTC) return 0;
+
+ GetSystemTimePreciseAsFileTime(&ft);
+ time = ((ULONGLONG)ft.dwHighDateTime << 32) | ft.dwLowDateTime;
+
+ ts->tv_sec = time / TICKSPERSEC - SECS_1601_TO_1970;
+ ts->tv_nsec = time % TICKSPERSEC * 100;
+ return base;
+}
+
+/*********************************************************************
+ * _timespec32_get (UCRTBASE.@)
+ */
+int CDECL _timespec32_get(struct _timespec32 *ts, int base)
+{
+ struct _timespec64 ts64;
+
+ if(_timespec64_get(&ts64, base) != base)
+ return 0;
+ if(ts64.tv_sec != (MSVCRT___time32_t)ts64.tv_sec)
+ return 0;
+
+ ts->tv_sec = ts64.tv_sec;
+ ts->tv_nsec = ts64.tv_nsec;
+ return base;
+}
+#endif /* _MSVCR_VER >= 140 */
diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec
index 00d779c..423bb96 100644
--- a/dlls/ucrtbase/ucrtbase.spec
+++ b/dlls/ucrtbase/ucrtbase.spec
@@ -1972,8 +1972,8 @@
@ cdecl _tempnam(str str) MSVCRT__tempnam
@ cdecl _time32(ptr) MSVCRT__time32
@ cdecl _time64(ptr) MSVCRT__time64
-@ stub _timespec32_get
-@ stub _timespec64_get
+@ cdecl _timespec32_get(ptr long)
+@ cdecl _timespec64_get(ptr long)
@ cdecl _tolower(long) MSVCRT__tolower
@ cdecl _tolower_l(long ptr) MSVCRT__tolower_l
@ cdecl _toupper(long) MSVCRT__toupper
More information about the wine-cvs
mailing list