From 037037df6cdc567132acbeeb2067c442f945889e Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Fri, 22 Apr 2022 15:26:59 +0100 Subject: date: enable FEATURE_DATE_NANO Provide a WIN32 implementation of clock_gettime(2), though only with support for CLOCK_REALTIME. This makes it possible to enable FEATURE_DATE_NANO which adds support for the %N date format. MinGW-w64 has clock_gettime(2) but it's in the winpthreads library and we don't want to bother with that. --- configs/mingw32_defconfig | 2 +- configs/mingw64_defconfig | 2 +- include/mingw.h | 1 + win32/mingw.c | 13 +++++++++++++ win32/sys/syscall.h | 0 5 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 win32/sys/syscall.h diff --git a/configs/mingw32_defconfig b/configs/mingw32_defconfig index 5d9d98eaf..af6ab53c3 100644 --- a/configs/mingw32_defconfig +++ b/configs/mingw32_defconfig @@ -251,7 +251,7 @@ CONFIG_CUT=y CONFIG_FEATURE_CUT_REGEX=y CONFIG_DATE=y CONFIG_FEATURE_DATE_ISOFMT=y -# CONFIG_FEATURE_DATE_NANO is not set +CONFIG_FEATURE_DATE_NANO=y CONFIG_FEATURE_DATE_COMPAT=y CONFIG_DD=y # CONFIG_FEATURE_DD_SIGNAL_HANDLING is not set diff --git a/configs/mingw64_defconfig b/configs/mingw64_defconfig index cd77b98b3..7b8de70f0 100644 --- a/configs/mingw64_defconfig +++ b/configs/mingw64_defconfig @@ -251,7 +251,7 @@ CONFIG_CUT=y CONFIG_FEATURE_CUT_REGEX=y CONFIG_DATE=y CONFIG_FEATURE_DATE_ISOFMT=y -# CONFIG_FEATURE_DATE_NANO is not set +CONFIG_FEATURE_DATE_NANO=y CONFIG_FEATURE_DATE_COMPAT=y CONFIG_DD=y # CONFIG_FEATURE_DD_SIGNAL_HANDLING is not set diff --git a/include/mingw.h b/include/mingw.h index 06fb3b289..8a9610898 100644 --- a/include/mingw.h +++ b/include/mingw.h @@ -276,6 +276,7 @@ struct timespec { time_t timegm(struct tm *tm); int nanosleep(const struct timespec *req, struct timespec *rem); +int clock_gettime(clockid_t clockid, struct timespec *tp); /* * sys/stat.h diff --git a/win32/mingw.c b/win32/mingw.c index 91c52b75c..2de07122e 100644 --- a/win32/mingw.c +++ b/win32/mingw.c @@ -927,6 +927,19 @@ int gettimeofday(struct timeval *tv, void *tz UNUSED_PARAM) return 0; } +int clock_gettime(clockid_t clockid, struct timespec *tp) +{ + FILETIME ft; + + if (clockid != CLOCK_REALTIME) { + errno = ENOSYS; + return -1; + } + GetSystemTimeAsFileTime(&ft); + *tp = filetime_to_timespec(&ft); + return 0; +} + int pipe(int filedes[2]) { if (_pipe(filedes, PIPE_BUF, 0) < 0) diff --git a/win32/sys/syscall.h b/win32/sys/syscall.h new file mode 100644 index 000000000..e69de29bb -- cgit v1.2.3-55-g6feb