X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fgettime.h;h=772ff9b50c536ecb01c9b81f744b6420596a3883;hb=391eec9ee78fc9dfdc476ad2a8ed7755009e4a2f;hp=4d5a02e1e253cfff34e0e7f5726f7959b6553055;hpb=ecf08255b0b6b9d15b86f614942ac8f53f41302a;p=minetest.git diff --git a/src/gettime.h b/src/gettime.h index 4d5a02e1e..772ff9b50 100644 --- a/src/gettime.h +++ b/src/gettime.h @@ -17,12 +17,11 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef GETTIME_HEADER -#define GETTIME_HEADER +#pragma once -#include "irrlichttypes.h" -#include +#include #include +#include enum TimePrecision { @@ -32,15 +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; } - -#endif