From 5f1dd48496405535f2e316b9b6b70c2c5de86c00 Mon Sep 17 00:00:00 2001 From: Marcel Admiraal Date: Fri, 4 Sep 2020 12:22:43 +0100 Subject: [PATCH] Replace calls to gmtime with gmtime_r and localtime with localtime_r. (cherry picked from commit 4b3aec50c01ea079f4c303e2986484b4771dc918) --- drivers/unix/os_unix.cpp | 46 +++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp index a82f19768c..f9ab8c73ea 100644 --- a/drivers/unix/os_unix.cpp +++ b/drivers/unix/os_unix.cpp @@ -194,52 +194,54 @@ uint64_t OS_Unix::get_system_time_msecs() const { } OS::Date OS_Unix::get_date(bool utc) const { - time_t t = time(NULL); - struct tm *lt; - if (utc) - lt = gmtime(&t); - else - lt = localtime(&t); + struct tm lt; + if (utc) { + gmtime_r(&t, <); + } else { + localtime_r(&t, <); + } Date ret; - ret.year = 1900 + lt->tm_year; + ret.year = 1900 + lt.tm_year; // Index starting at 1 to match OS_Unix::get_date // and Windows SYSTEMTIME and tm_mon follows the typical structure // of 0-11, noted here: http://www.cplusplus.com/reference/ctime/tm/ - ret.month = (Month)(lt->tm_mon + 1); - ret.day = lt->tm_mday; - ret.weekday = (Weekday)lt->tm_wday; - ret.dst = lt->tm_isdst; + ret.month = (Month)(lt.tm_mon + 1); + ret.day = lt.tm_mday; + ret.weekday = (Weekday)lt.tm_wday; + ret.dst = lt.tm_isdst; return ret; } OS::Time OS_Unix::get_time(bool utc) const { time_t t = time(NULL); - struct tm *lt; - if (utc) - lt = gmtime(&t); - else - lt = localtime(&t); + struct tm lt; + if (utc) { + gmtime_r(&t, <); + } else { + localtime_r(&t, <); + } Time ret; - ret.hour = lt->tm_hour; - ret.min = lt->tm_min; - ret.sec = lt->tm_sec; + ret.hour = lt.tm_hour; + ret.min = lt.tm_min; + ret.sec = lt.tm_sec; get_time_zone_info(); return ret; } OS::TimeZoneInfo OS_Unix::get_time_zone_info() const { time_t t = time(NULL); - struct tm *lt = localtime(&t); + struct tm lt; + localtime_r(&t, <); char name[16]; - strftime(name, 16, "%Z", lt); + strftime(name, 16, "%Z", <); name[15] = 0; TimeZoneInfo ret; ret.name = name; char bias_buf[16]; - strftime(bias_buf, 16, "%z", lt); + strftime(bias_buf, 16, "%z", <); int bias; bias_buf[15] = 0; sscanf(bias_buf, "%d", &bias);