From 45b439c3af000eb41c819068d093406810dd036c Mon Sep 17 00:00:00 2001
From: Eric Blake <eblake@redhat.com>
Date: Tue, 8 Jan 2019 13:41:28 -0600
Subject: [PATCH] examples: Work around lack of mingw localtime_r()

mingw lacks localtime_r(); we were getting it from gnulib. But since
commit acf522e8 stopped linking examples against gnulib, we are
getting a build failure. Keep the examples standalone, and work
around mingw by using the non-reentrant localtime() (safe since our
examples are single-threaded), and add a necessary exemption to our
syntax check.

Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
---
 cfg.mk                        | 2 +-
 examples/admin/client_info.c  | 6 +++++-
 examples/admin/list_clients.c | 6 +++++-
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/cfg.mk b/cfg.mk
index d9a8a44dc4..a75bfef86e 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -1233,7 +1233,7 @@ exclude_file_name_regexp--sc_prohibit_newline_at_end_of_diagnostic = \
   ^src/rpc/gendispatch\.pl$$
 
 exclude_file_name_regexp--sc_prohibit_nonreentrant = \
-  ^((po|tests)/|docs/.*(py|js|html\.in)|run.in$$|tools/wireshark/util/genxdrstub\.pl$$)
+  ^((po|tests|examples/admin)/|docs/.*(py|js|html\.in)|run.in$$|tools/wireshark/util/genxdrstub\.pl$$)
 
 exclude_file_name_regexp--sc_prohibit_select = \
 	^cfg\.mk$$
diff --git a/examples/admin/client_info.c b/examples/admin/client_info.c
index 2c46ccf514..f3f62a656b 100644
--- a/examples/admin/client_info.c
+++ b/examples/admin/client_info.c
@@ -30,9 +30,13 @@ exampleGetTimeStr(time_t then)
 {
     char *ret = NULL;
     struct tm timeinfo;
+    struct tm *timeinfop;
 
-    if (!localtime_r(&then, &timeinfo))
+    /* localtime_r() is smarter, but since mingw lacks it and this
+     * example is single-threaded, we can get away with localtime */
+    if (!(timeinfop = localtime(&then)))
         return NULL;
+    timeinfo = *timeinfop;
 
     if (!(ret = calloc(64, sizeof(char))))
         return NULL;
diff --git a/examples/admin/list_clients.c b/examples/admin/list_clients.c
index 15205a7bd1..5cf8e4c2a6 100644
--- a/examples/admin/list_clients.c
+++ b/examples/admin/list_clients.c
@@ -28,9 +28,13 @@ exampleGetTimeStr(time_t then)
 {
     char *ret = NULL;
     struct tm timeinfo;
+    struct tm *timeinfop;
 
-    if (!localtime_r(&then, &timeinfo))
+    /* localtime_r() is smarter, but since mingw lacks it and this
+     * example is single-threaded, we can get away with localtime */
+    if (!(timeinfop = localtime(&then)))
         return NULL;
+    timeinfo = *timeinfop;
 
     if (!(ret = calloc(64, sizeof(char))))
         return NULL;
-- 
GitLab