summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorJose <pepone@users.noreply.github.com>2021-01-01 15:59:04 +0100
committerGitHub <noreply@github.com>2021-01-01 15:59:04 +0100
commit41d195922ab07220a002cb8072ab28f22c4287d2 (patch)
tree45d14eba345024657e04b4b2378542163351bc3b /cpp
parentAdd /node_modules to test HTTP server paths (diff)
downloadice-41d195922ab07220a002cb8072ab28f22c4287d2.tar.bz2
ice-41d195922ab07220a002cb8072ab28f22c4287d2.tar.xz
ice-41d195922ab07220a002cb8072ab28f22c4287d2.zip
Fix localtime/gmtime usage (#1227)
* Prefer the reentrant versions of localtime/gmtime when available * Simplify pragmas * Review comment fixes * Remove comment
Diffstat (limited to 'cpp')
-rw-r--r--cpp/src/IceSSL/OpenSSLCertificateI.cpp21
-rw-r--r--cpp/src/IceUtil/Time.cpp10
2 files changed, 13 insertions, 18 deletions
diff --git a/cpp/src/IceSSL/OpenSSLCertificateI.cpp b/cpp/src/IceSSL/OpenSSLCertificateI.cpp
index db83275bc22..7109710f048 100644
--- a/cpp/src/IceSSL/OpenSSLCertificateI.cpp
+++ b/cpp/src/IceSSL/OpenSSLCertificateI.cpp
@@ -209,24 +209,21 @@ ASMUtcTimeToTime(const ASN1_UTCTIME* s)
}
# undef g2
- //
- // If timegm was on all systems this code could be
- // return IceUtil::Time::seconds(timegm(&tm) - offset*60);
- //
- // Windows doesn't support the re-entrant _r versions.
- //
-#if defined(_MSC_VER)
-# pragma warning(disable:4996) // localtime is depercated
-#endif
time_t tzone;
{
IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(mut);
time_t now = time(0);
- tzone = mktime(localtime(&now)) - mktime(gmtime(&now));
- }
+ struct tm localTime;
+ struct tm gmTime;
#if defined(_MSC_VER)
-# pragma warning(default:4996) // localtime is depercated
+ localtime_s(&localTime, &now);
+ gmtime_s(&gmTime, &now);
+#else
+ localtime_r(&now, &localTime);
+ gmtime_r(&now, &gmTime);
#endif
+ tzone = mktime(&localTime) - mktime(&gmTime);
+ }
IceUtil::Time time = IceUtil::Time::seconds(mktime(&tm) - IceUtil::Int64(offset) * 60 + tzone);
diff --git a/cpp/src/IceUtil/Time.cpp b/cpp/src/IceUtil/Time.cpp
index bac201a055d..68d775d0a9a 100644
--- a/cpp/src/IceUtil/Time.cpp
+++ b/cpp/src/IceUtil/Time.cpp
@@ -280,17 +280,15 @@ IceUtil::Time::toString(const std::string& format) const
{
time_t time = static_cast<long>(_usec / 1000000);
- struct tm* t;
-#ifdef _WIN32
- t = localtime(&time);
-#else
struct tm tr;
+#ifdef _MSC_VER
+ localtime_s(&tr, &time);
+#else
localtime_r(&time, &tr);
- t = &tr;
#endif
char buf[32];
- if(strftime(buf, sizeof(buf), format.c_str(), t) == 0)
+ if(strftime(buf, sizeof(buf), format.c_str(), &tr) == 0)
{
return std::string();
}