From 3bdef853b2b03a3df53be9fc64a5073ddcb38f32 Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Fri, 24 Mar 2023 10:29:36 +0800 Subject: [PATCH] fix: fix windows handling localtime_s error --- source/os/src/osTime.c | 7 +++++++ tools/shell/src/shellEngine.c | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/source/os/src/osTime.c b/source/os/src/osTime.c index 685693a709..c0f4bc7d3e 100644 --- a/source/os/src/osTime.c +++ b/source/os/src/osTime.c @@ -33,6 +33,7 @@ #include //#define TM_YEAR_BASE 1970 //origin #define TM_YEAR_BASE 1900 // slguan +#define _MAX__TIME64_T 0x793406fffi64 // This magic number is the number of 100 nanosecond intervals since January 1, 1601 (UTC) // until 00:00:00 January 1, 1970 @@ -444,6 +445,9 @@ struct tm *taosLocalTime(const time_t *timep, struct tm *result) { result->tm_yday = 0; result->tm_isdst = 0; } else { + if (*timep > _MAX__TIME64_T) { + return NULL; + } localtime_s(result, timep); } #else @@ -500,6 +504,9 @@ struct tm *taosLocalTimeNolock(struct tm *result, const time_t *timep, int dst) result->tm_yday = 0; result->tm_isdst = 0; } else { + if (*timep > _MAX__TIME64_T) { + return NULL; + } localtime_s(result, timep); } #elif defined(LINUX) diff --git a/tools/shell/src/shellEngine.c b/tools/shell/src/shellEngine.c index 3080b15b8c..e732d42082 100644 --- a/tools/shell/src/shellEngine.c +++ b/tools/shell/src/shellEngine.c @@ -291,7 +291,10 @@ char *shellFormatTimestamp(char *buf, int64_t val, int32_t precision) { } struct tm ptm = {0}; - taosLocalTime(&tt, &ptm); + if (taosLocalTime(&tt, &ptm) == NULL) { + sprintf(buf, "%s", "NaN"); + return buf; + } size_t pos = strftime(buf, 35, "%Y-%m-%d %H:%M:%S", &ptm); if (precision == TSDB_TIME_PRECISION_NANO) { -- GitLab