X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fgettime.h;h=772ff9b50c536ecb01c9b81f744b6420596a3883;hb=e1f707d7e1ac0412eedbfcc200a1b90339d3ab0d;hp=bae8b97c016cd414b0ec9b41649b654515a657bc;hpb=921151d97a2fb2238ab514324fb95e2732248b96;p=dragonfireclient.git diff --git a/src/gettime.h b/src/gettime.h index bae8b97c0..772ff9b50 100644 --- a/src/gettime.h +++ b/src/gettime.h @@ -19,9 +19,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#include "irrlichttypes.h" -#include +#include #include +#include enum TimePrecision { @@ -31,13 +31,34 @@ enum TimePrecision PRECISION_NANO }; -inline std::string getTimestamp() +inline struct tm mt_localtime() { + // initialize the time zone on first invocation + static std::once_flag tz_init; + std::call_once(tz_init, [] { +#ifdef _WIN32 + _tzset(); +#else + tzset(); +#endif + }); + + struct tm ret; time_t t = time(NULL); - // This is not really thread-safe but it won't break anything - // except its own output, so just go with it. - struct tm *tm = localtime(&t); + // TODO we should check if the function returns NULL, which would mean error +#ifdef _WIN32 + localtime_s(&ret, &t); +#else + localtime_r(&t, &ret); +#endif + return ret; +} + + +inline std::string getTimestamp() +{ + const struct tm tm = mt_localtime(); char cs[20]; // YYYY-MM-DD HH:MM:SS + '\0' - strftime(cs, 20, "%Y-%m-%d %H:%M:%S", tm); + strftime(cs, 20, "%Y-%m-%d %H:%M:%S", &tm); return cs; }