From 9b6937eb1f53e9901f0438b2521b98d24bc047b5 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Thu, 4 Apr 2013 23:31:15 -0500 Subject: [PATCH] Use gmtime_r() and localtime_r() instead of non-thread-safe versions. Signed-off-by: Ben Pfaff --- lib/dynamic-string.c | 12 ++++++------ lib/table.c | 5 +++-- ovsdb/ovsdb-tool.c | 3 ++- utilities/ovs-ofctl.c | 4 +++- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/dynamic-string.c b/lib/dynamic-string.c index bd1cf4535..c37360163 100644 --- a/lib/dynamic-string.c +++ b/lib/dynamic-string.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc. + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -184,21 +184,21 @@ ds_put_printable(struct ds *ds, const char *s, size_t n) } /* Writes the current time to 'string' based on 'template'. - * The current time is either localtime or UTC based on 'utc'. */ + * The current time is either local time or UTC based on 'utc'. */ void ds_put_strftime(struct ds *ds, const char *template, bool utc) { - const struct tm *tm; + struct tm tm; time_t now = time_wall(); if (utc) { - tm = gmtime(&now); + gmtime_r(&now, &tm); } else { - tm = localtime(&now); + localtime_r(&now, &tm); } for (;;) { size_t avail = ds->string ? ds->allocated - ds->length + 1 : 0; - size_t used = strftime(&ds->string[ds->length], avail, template, tm); + size_t used = strftime(&ds->string[ds->length], avail, template, &tm); if (used) { ds->length += used; return; diff --git a/lib/table.c b/lib/table.c index 15bcec8b5..266c4105e 100644 --- a/lib/table.c +++ b/lib/table.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc. + * Copyright (c) 2009, 2010, 2011, 2012, 2013 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -222,7 +222,8 @@ static void table_format_timestamp__(char *s, size_t size) { time_t now = time_wall(); - strftime(s, size, "%Y-%m-%d %H:%M:%S", gmtime(&now)); + struct tm tm; + strftime(s, size, "%Y-%m-%d %H:%M:%S", gmtime_r(&now, &tm)); } static void diff --git a/ovsdb/ovsdb-tool.c b/ovsdb/ovsdb-tool.c index b50b39bcc..fe6ab423f 100644 --- a/ovsdb/ovsdb-tool.c +++ b/ovsdb/ovsdb-tool.c @@ -519,9 +519,10 @@ do_show_log(int argc, char *argv[]) date = shash_find_data(json_object(json), "_date"); if (date && date->type == JSON_INTEGER) { time_t t = json_integer(date); + struct tm tm; char s[128]; - strftime(s, sizeof s, "%Y-%m-%d %H:%M:%S", gmtime(&t)); + strftime(s, sizeof s, "%Y-%m-%d %H:%M:%S", gmtime_r(&t, &tm)); printf(" %s", s); } diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c index ec775c7dd..409d6408a 100644 --- a/utilities/ovs-ofctl.c +++ b/utilities/ovs-ofctl.c @@ -1358,9 +1358,11 @@ monitor_vconn(struct vconn *vconn) if (timestamp) { time_t now = time_wall(); + struct tm tm; char s[32]; - strftime(s, sizeof s, "%Y-%m-%d %H:%M:%S: ", gmtime(&now)); + strftime(s, sizeof s, "%Y-%m-%d %H:%M:%S: ", + gmtime_r(&now, &tm)); fputs(s, stderr); } -- 2.43.0