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(a)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;
--
2.20.1