|
|
5544c1 |
From 27ca56812d2140c774f9d2b67a2919ef47c69758 Mon Sep 17 00:00:00 2001
|
|
|
5544c1 |
From: Stefan Weil <sw@weilnetz.de>
|
|
|
5544c1 |
Date: Sat, 22 Sep 2012 22:26:19 +0200
|
|
|
5544c1 |
Subject: [PATCH] w32: Add implementation of gmtime_r, localtime_r
|
|
|
5544c1 |
|
|
|
5544c1 |
Those functions are missing in MinGW.
|
|
|
5544c1 |
|
|
|
5544c1 |
Some versions of MinGW-w64 include defines for gmtime_r and localtime_r.
|
|
|
5544c1 |
Older versions of these macros are buggy (they return a pointer to a
|
|
|
5544c1 |
static variable), therefore we don't want them. Newer versions are
|
|
|
5544c1 |
similar to the code used here, but without the memset.
|
|
|
5544c1 |
|
|
|
5544c1 |
The implementation which is used here is not strictly reentrant,
|
|
|
5544c1 |
but sufficiently good for QEMU on w32 or w64.
|
|
|
5544c1 |
|
|
|
5544c1 |
Signed-off-by: Stefan Weil <sw@weilnetz.de>
|
|
|
5544c1 |
[blauwirbel@gmail.com: added comment about locking]
|
|
|
5544c1 |
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
|
|
|
5544c1 |
(cherry picked from commit d3e8f95753114a827f9cd8e819b1d5cc8333f76b)
|
|
|
5544c1 |
|
|
|
5544c1 |
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
|
|
|
5544c1 |
---
|
|
|
5544c1 |
oslib-win32.c | 24 ++++++++++++++++++++++++
|
|
|
5544c1 |
qemu-os-win32.h | 6 ++++++
|
|
|
5544c1 |
2 files changed, 30 insertions(+)
|
|
|
5544c1 |
|
|
|
5544c1 |
diff --git a/oslib-win32.c b/oslib-win32.c
|
|
|
5544c1 |
index ffbc6d0..51b33e8 100644
|
|
|
5544c1 |
--- a/oslib-win32.c
|
|
|
5544c1 |
+++ b/oslib-win32.c
|
|
|
5544c1 |
@@ -74,6 +74,30 @@ void qemu_vfree(void *ptr)
|
|
|
5544c1 |
VirtualFree(ptr, 0, MEM_RELEASE);
|
|
|
5544c1 |
}
|
|
|
5544c1 |
|
|
|
5544c1 |
+/* FIXME: add proper locking */
|
|
|
5544c1 |
+struct tm *gmtime_r(const time_t *timep, struct tm *result)
|
|
|
5544c1 |
+{
|
|
|
5544c1 |
+ struct tm *p = gmtime(timep);
|
|
|
5544c1 |
+ memset(result, 0, sizeof(*result));
|
|
|
5544c1 |
+ if (p) {
|
|
|
5544c1 |
+ *result = *p;
|
|
|
5544c1 |
+ p = result;
|
|
|
5544c1 |
+ }
|
|
|
5544c1 |
+ return p;
|
|
|
5544c1 |
+}
|
|
|
5544c1 |
+
|
|
|
5544c1 |
+/* FIXME: add proper locking */
|
|
|
5544c1 |
+struct tm *localtime_r(const time_t *timep, struct tm *result)
|
|
|
5544c1 |
+{
|
|
|
5544c1 |
+ struct tm *p = localtime(timep);
|
|
|
5544c1 |
+ memset(result, 0, sizeof(*result));
|
|
|
5544c1 |
+ if (p) {
|
|
|
5544c1 |
+ *result = *p;
|
|
|
5544c1 |
+ p = result;
|
|
|
5544c1 |
+ }
|
|
|
5544c1 |
+ return p;
|
|
|
5544c1 |
+}
|
|
|
5544c1 |
+
|
|
|
5544c1 |
void socket_set_block(int fd)
|
|
|
5544c1 |
{
|
|
|
5544c1 |
unsigned long opt = 0;
|
|
|
5544c1 |
diff --git a/qemu-os-win32.h b/qemu-os-win32.h
|
|
|
5544c1 |
index b3e451b..8ba466d 100644
|
|
|
5544c1 |
--- a/qemu-os-win32.h
|
|
|
5544c1 |
+++ b/qemu-os-win32.h
|
|
|
5544c1 |
@@ -68,6 +68,12 @@
|
|
|
5544c1 |
/* Declaration of ffs() is missing in MinGW's strings.h. */
|
|
|
5544c1 |
int ffs(int i);
|
|
|
5544c1 |
|
|
|
5544c1 |
+/* Missing POSIX functions. Don't use MinGW-w64 macros. */
|
|
|
5544c1 |
+#undef gmtime_r
|
|
|
5544c1 |
+struct tm *gmtime_r(const time_t *timep, struct tm *result);
|
|
|
5544c1 |
+#undef localtime_r
|
|
|
5544c1 |
+struct tm *localtime_r(const time_t *timep, struct tm *result);
|
|
|
5544c1 |
+
|
|
|
5544c1 |
static inline void os_setup_signal_handling(void) {}
|
|
|
5544c1 |
static inline void os_daemonize(void) {}
|
|
|
5544c1 |
static inline void os_setup_post(void) {}
|
|
|
5544c1 |
--
|
|
|
5544c1 |
1.7.12.1
|
|
|
5544c1 |
|