diff --git a/include/common/tglobal.h b/include/common/tglobal.h index 5e245f376126f0fcae4e75e67a1e25019b332c60..bb704f153644b5d469e429de753cf550dcd709d3 100644 --- a/include/common/tglobal.h +++ b/include/common/tglobal.h @@ -23,11 +23,9 @@ extern "C" { #include "tdef.h" // common -extern int8_t tsDaylight; extern int32_t tsCompressMsgSize; extern int32_t tsCompressColData; extern int32_t tsMaxNumOfDistinctResults; -extern char tsTempDir[]; extern int tsCompatibleModel; // 2.0 compatible model extern int8_t tsEnableSlaveQuery; extern int8_t tsEnableAdjustMaster; diff --git a/include/common/tmsg.h b/include/common/tmsg.h index ae3586e7356ccea9c00bf79b1794687e65080209..9ab78f3c9603011296c7ef450ba0d792dbc19043 100644 --- a/include/common/tmsg.h +++ b/include/common/tmsg.h @@ -656,9 +656,9 @@ int32_t tDeserializeSRetrieveFuncRsp(void* buf, int32_t bufLen, SRetrieveFuncRsp typedef struct { int32_t statusInterval; int64_t checkTime; // 1970-01-01 00:00:00.000 - char timezone[TSDB_TIMEZONE_LEN]; // tsTimezone - char locale[TSDB_LOCALE_LEN]; // tsLocale - char charset[TSDB_LOCALE_LEN]; // tsCharset + char timezone[TD_TIMEZONE_LEN]; // tsTimezone + char locale[TD_LOCALE_LEN]; // tsLocale + char charset[TD_LOCALE_LEN]; // tsCharset } SClusterCfg; typedef struct { diff --git a/include/dnode/mgmt/dnode.h b/include/dnode/mgmt/dnode.h index 5d6c869b4d8a66463590fa0762da3658adc2a41e..d630fd0b1acf8beedce951d533a18440b49bed11 100644 --- a/include/dnode/mgmt/dnode.h +++ b/include/dnode/mgmt/dnode.h @@ -34,9 +34,9 @@ typedef struct { bool printAuth; int32_t rpcTimer; int32_t rpcMaxTime; - char timezone[TSDB_TIMEZONE_LEN]; - char locale[TSDB_LOCALE_LEN]; - char charset[TSDB_LOCALE_LEN]; + char timezone[TD_TIMEZONE_LEN]; + char locale[TD_LOCALE_LEN]; + char charset[TD_LOCALE_LEN]; char buildinfo[64]; char gitinfo[48]; } SDnodeEnvCfg; diff --git a/include/libs/config/config.h b/include/libs/config/config.h index 3c9ec1e3bfab5a06d08c7e8cc72a8216ee282232..594c2586484cbbce46836bc4e7aae6a198a24fd0 100644 --- a/include/libs/config/config.h +++ b/include/libs/config/config.h @@ -80,6 +80,7 @@ int32_t cfgGetSize(SConfig *pCfg); SConfigItem *cfgIterate(SConfig *pCfg, SConfigItem *pIter); void cfgCancelIterate(SConfig *pCfg, SConfigItem *pIter); SConfigItem *cfgGetItem(SConfig *pCfg, const char *name); +int32_t cfgSetItem(SConfig *pCfg, const char *name, const char *value, ECfgSrcType stype); int32_t cfgAddBool(SConfig *pCfg, const char *name, bool defaultVal); int32_t cfgAddInt32(SConfig *pCfg, const char *name, int32_t defaultVal, int64_t minval, int64_t maxval); diff --git a/include/os/os.h b/include/os/os.h index 023d2b04705074abcec4c1dc927211bf63512112..d96f7efb51dd0ca36d307308ba005d4fd7f628b6 100644 --- a/include/os/os.h +++ b/include/os/os.h @@ -59,6 +59,7 @@ extern "C" { #include "osEndian.h" #include "osEnv.h" #include "osFile.h" +#include "osLocale.h" #include "osLz4.h" #include "osMath.h" #include "osMemory.h" @@ -73,6 +74,7 @@ extern "C" { #include "osThread.h" #include "osTime.h" #include "osTimer.h" +#include "osTimezone.h" void osInit(); diff --git a/include/os/osDir.h b/include/os/osDir.h index 01ec24f23569e577ead33d9b3400078881b37e97..e328c420638eb1d146abe97f8abf6bacb6286377 100644 --- a/include/os/osDir.h +++ b/include/os/osDir.h @@ -23,7 +23,7 @@ extern "C" { void taosRemoveDir(const char *dirname); int32_t taosDirExist(char *dirname); int32_t taosMkDir(const char *dirname); -void taosRemoveOldFiles(char *dirname, int32_t keepDays); +void taosRemoveOldFiles(const char *dirname, int32_t keepDays); int32_t taosExpandDir(const char *dirname, char *outname, int32_t maxlen); int32_t taosRealPath(char *dirname, int32_t maxlen); diff --git a/include/os/osEnv.h b/include/os/osEnv.h index 2745520ae3544ef3db6148dd5a646f53a8327d80..29898953e6667056e653562950d36514c4a60d42 100644 --- a/include/os/osEnv.h +++ b/include/os/osEnv.h @@ -16,28 +16,37 @@ #ifndef _TD_OS_ENV_H_ #define _TD_OS_ENV_H_ +#include "osSysinfo.h" + #ifdef __cplusplus extern "C" { #endif -extern char tsOsName[]; +typedef struct SOsEnv SOsEnv; -extern char tsDataDir[]; -extern char tsLogDir[]; -extern char tsTempDir[]; extern char configDir[]; -extern struct SDiskSpace tsLogSpace; -extern struct SDiskSpace tsTempSpace; -extern struct SDiskSpace tsDataSpace; - -void taosUpdateLogSpace(); -void taosUpdateTempSpace(); -void taosUpdateDataSpace(); -bool taosLogSpaceAvailable(); -bool taosTmpSpaceAvailable(); -bool taosDataSpaceAvailable(); -void taosUpdateAllSpace(); +void osInit(); +void osUpdate(); + +bool osLogSpaceAvailable(); +int8_t osDaylight(); + +const char *osLogDir(); +const char *osTempDir(); +const char *osDataDir(); +const char *osName(); +const char *osTimezone(); +const char *osLocale(); +const char *osCharset(); + +void osSetLogDir(const char *logDir); +void osSetTempDir(const char *tempDir); +void osSetDataDir(const char *dataDir); +void osSetLogReservedSpace(float sizeInGB); +void osSetTempReservedSpace(float sizeInGB); +void osSetDataReservedSpace(float sizeInGB); +void osSetTimezone(const char *timezone); #ifdef __cplusplus } diff --git a/include/common/ttimezone.h b/include/os/osLocale.h similarity index 70% rename from include/common/ttimezone.h rename to include/os/osLocale.h index cc50a29d57a2f1a308b8b236fc7bb80122adb387..6e313eb8cde14e67f56a9e8334239ca714b88afd 100644 --- a/include/common/ttimezone.h +++ b/include/os/osLocale.h @@ -13,17 +13,22 @@ * along with this program. If not, see . */ -#ifndef _TD_COMMON_TIMEZONE_H_ -#define _TD_COMMON_TIMEZONE_H_ +#ifndef _TD_OS_LOCALE_H_ +#define _TD_OS_LOCALE_H_ + +#include "os.h" +#include "osString.h" #ifdef __cplusplus extern "C" { #endif -void tsSetTimeZone(); +char *taosCharsetReplace(char *charsetstr); +void taosGetSystemLocale(char *outLocale, char *outCharset); +void taosSetSystemLocale(const char *inLocale, const char *inCharSet); #ifdef __cplusplus } #endif -#endif /*_TD_COMMON_TIMEZONE_H_*/ +#endif /*_TD_OS_LOCALE_H_*/ diff --git a/include/os/osString.h b/include/os/osString.h index 582411d4440e7b1539c4b926413c7ed9751dfe62..88160dd69e419450d1ec481a83a28065df99186d 100644 --- a/include/os/osString.h +++ b/include/os/osString.h @@ -45,7 +45,6 @@ int32_t taosUcs4ToMbs(void *ucs4, int32_t ucs4_max_len, char *mbs); bool taosMbsToUcs4(const char *mbs, size_t mbs_len, char *ucs4, int32_t ucs4_max_len, int32_t *len); int32_t tasoUcs4Compare(void *f1_ucs4, void *f2_ucs4, int32_t bytes, int8_t ncharSize); bool taosValidateEncodec(const char *encodec); -char * taosCharsetReplace(char *charsetstr); #ifdef __cplusplus } diff --git a/include/os/osSysinfo.h b/include/os/osSysinfo.h index 6ab2a104dfb3bc7e81a03e446e64506fdcca6a30..64362603fea44648d159b1b2e3491c245066672f 100644 --- a/include/os/osSysinfo.h +++ b/include/os/osSysinfo.h @@ -21,9 +21,10 @@ extern "C" { #endif #include "os.h" - -#define TSDB_LOCALE_LEN 64 -#define TSDB_TIMEZONE_LEN 96 + +#define TD_LOCALE_LEN 64 +#define TD_CHARSET_LEN 64 +#define TD_TIMEZONE_LEN 96 typedef struct { int64_t total; @@ -41,9 +42,6 @@ extern int64_t tsOpenMax; extern int64_t tsStreamMax; extern int32_t tsNumOfCores; extern int32_t tsTotalMemoryMB; -extern char tsTimezone[]; -extern char tsLocale[]; -extern char tsCharset[]; // default encode string diff --git a/include/common/tlocale.h b/include/os/osTimezone.h similarity index 75% rename from include/common/tlocale.h rename to include/os/osTimezone.h index d809c75d67983fb6ac844a656a361876ea7d3504..ff015ef0b1221eeba361818f5e010bd7f43fb0fd 100644 --- a/include/common/tlocale.h +++ b/include/os/osTimezone.h @@ -13,17 +13,18 @@ * along with this program. If not, see . */ -#ifndef _TD_COMMON_LOCALE_H_ -#define _TD_COMMON_LOCALE_H_ +#ifndef _TD_OS_TIMEZONE_H_ +#define _TD_OS_TIMEZONE_H_ #ifdef __cplusplus extern "C" { #endif -void tsSetLocale(); +void taosGetSystemTimezone(char *outTimezone); +void taosSetSystemTimezone(const char *inTimezone, char *outTimezone, int8_t *outDaylight); #ifdef __cplusplus } -#endif /*_TD_COMMON_LOCALE_H_*/ - #endif + +#endif /*_TD_OS_TIMEZONE_H_*/ diff --git a/source/client/src/clientCfg.c b/source/client/src/clientCfg.c index 826626fd778361f3f5660c1c9680d04837ff5a26..d1dafbed5c9a3fd0726a813711cef4da598dbb11 100644 --- a/source/client/src/clientCfg.c +++ b/source/client/src/clientCfg.c @@ -67,7 +67,7 @@ static int32_t tscAddLogCfg(SConfig *pCfg) { } static int32_t tscSetLogCfg(SConfig *pCfg) { - tstrncpy(tsLogDir, cfgGetItem(pCfg, "logDir")->str, PATH_MAX); + osSetLogDir(cfgGetItem(pCfg, "logDir")->str); tsAsyncLog = cfgGetItem(pCfg, "asyncLog")->bval; tsNumOfLogLines = cfgGetItem(pCfg, "numOfLogLines")->i32; tsLogKeepDays = cfgGetItem(pCfg, "logKeepDays")->i32; @@ -146,7 +146,7 @@ static int32_t tscAddCfg(SConfig *pCfg) { // if (cfgAddString(pCfg, "gitinfo", gitinfo) != 0) return -1; // if (cfgAddString(pCfg, "version", version) != 0) return -1; - // if (cfgAddDir(pCfg, "dataDir", tsDataDir) != 0) return -1; + // if (cfgAddDir(pCfg, "dataDir", osDataDir()) != 0) return -1; if (cfgAddTimezone(pCfg, "timezone", "") != 0) return -1; if (cfgAddLocale(pCfg, "locale", "") != 0) return -1; if (cfgAddCharset(pCfg, "charset", "") != 0) return -1; diff --git a/source/client/src/clientEnv.c b/source/client/src/clientEnv.c index 1ab05f53f3193895c5c56147e401a89c8856652e..f07048efbc0ed151ca63dbe782626d7078105a37 100644 --- a/source/client/src/clientEnv.c +++ b/source/client/src/clientEnv.c @@ -25,7 +25,6 @@ #include "tref.h" #include "trpc.h" #include "ttime.h" -#include "ttimezone.h" #define TSC_VAR_NOT_RELEASE 1 #define TSC_VAR_RELEASED 0 @@ -300,7 +299,7 @@ int taos_options_imp(TSDB_OPTION option, const char *str) { assert(cfg != NULL); size_t len = strlen(str); - if (len == 0 || len > TSDB_LOCALE_LEN) { + if (len == 0 || len > TD_LOCALE_LEN) { tscInfo("Invalid locale:%s, use default", str); return -1; } @@ -318,7 +317,7 @@ int taos_options_imp(TSDB_OPTION option, const char *str) { return -1; } - tstrncpy(tsLocale, defaultLocale, TSDB_LOCALE_LEN); + tstrncpy(tsLocale, defaultLocale, TD_LOCALE_LEN); } // set the user specified locale @@ -332,7 +331,7 @@ int taos_options_imp(TSDB_OPTION option, const char *str) { tscInfo("failed to set locale:%s, current locale:%s", str, tsLocale); } - tstrncpy(tsLocale, locale, TSDB_LOCALE_LEN); + tstrncpy(tsLocale, locale, TD_LOCALE_LEN); char *charset = strrchr(tsLocale, sep); if (charset != NULL) { @@ -347,7 +346,7 @@ int taos_options_imp(TSDB_OPTION option, const char *str) { tscInfo("charset changed from %s to %s", tsCharset, charset); } - tstrncpy(tsCharset, charset, TSDB_LOCALE_LEN); + tstrncpy(tsCharset, charset, TD_LOCALE_LEN); cfg->cfgStatus = TAOS_CFG_CSTATUS_OPTION; } else { @@ -371,7 +370,7 @@ int taos_options_imp(TSDB_OPTION option, const char *str) { assert(cfg != NULL); size_t len = strlen(str); - if (len == 0 || len > TSDB_LOCALE_LEN) { + if (len == 0 || len > TD_LOCALE_LEN) { tscInfo("failed to set charset:%s", str); return -1; } @@ -384,7 +383,7 @@ int taos_options_imp(TSDB_OPTION option, const char *str) { tscInfo("charset changed from %s to %s", tsCharset, str); } - tstrncpy(tsCharset, str, TSDB_LOCALE_LEN); + tstrncpy(tsCharset, str, TD_LOCALE_LEN); cfg->cfgStatus = TAOS_CFG_CSTATUS_OPTION; } else { tscInfo("charset:%s not valid", str); @@ -402,7 +401,7 @@ int taos_options_imp(TSDB_OPTION option, const char *str) { assert(cfg != NULL); if (cfg->cfgStatus <= TAOS_CFG_CSTATUS_OPTION) { - tstrncpy(tsTimezone, str, TSDB_TIMEZONE_LEN); + tstrncpy(tsTimezone, str, TD_TIMEZONE_LEN); tsSetTimeZone(); cfg->cfgStatus = TAOS_CFG_CSTATUS_OPTION; tscDebug("timezone set:%s, input:%s by taos_options", tsTimezone, str); diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index ce8be66e826f2fe85f86a191834f90e500a0b369..b4c9efd77d6a93ea755cfa0902e54eb6a38561e9 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -21,15 +21,12 @@ #include "tcompare.h" #include "tep.h" #include "tglobal.h" -#include "tlocale.h" #include "tlog.h" -#include "ttimezone.h" #include "tutil.h" #include "ulog.h" // common -int8_t tsDaylight = 0; int32_t tsMaxBinaryDisplayWidth = 30; int8_t tsEnableSlaveQuery = 1; int8_t tsEnableAdjustMaster = 1; @@ -235,7 +232,7 @@ static void doInitGlobalConfig(void) { cfg.option = "dataDir"; - cfg.ptr = tsDataDir; + cfg.ptr = osDataDir(); cfg.valType = TAOS_CFG_VTYPE_DATA_DIRCTORY; cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG; cfg.minValue = 0; @@ -419,7 +416,7 @@ static void doInitGlobalConfig(void) { taosAddConfigOption(cfg); cfg.option = "tempDir"; - cfg.ptr = tsTempDir; + cfg.ptr = osTempDir(); cfg.valType = TAOS_CFG_VTYPE_STRING; cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT; cfg.minValue = 0; diff --git a/source/common/src/tlocale.c b/source/common/src/tlocale.c deleted file mode 100644 index 1f2b9cd4b15cd7b633847d392d5cf570b834279a..0000000000000000000000000000000000000000 --- a/source/common/src/tlocale.c +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2019 TAOS Data, Inc. - * - * This program is free software: you can use, redistribute, and/or modify - * it under the terms of the GNU Affero General Public License, version 3 - * or later ("AGPL"), as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -#define _DEFAULT_SOURCE -#include "os.h" -#include "ulog.h" -#include "tglobal.h" -#include "tutil.h" - -/** - * In some Linux systems, setLocale(LC_CTYPE, "") may return NULL, in which case the launch of - * both the TDengine Server and the Client may be interrupted. - * - * In case that the setLocale failed to be executed, the right charset needs to be set. - */ -void tsSetLocale() { - char *locale = setlocale(LC_CTYPE, tsLocale); - - // default locale or user specified locale is not valid, abort launch - if (locale == NULL) { - uError("Invalid locale:%s, please set the valid locale in config file", tsLocale); - } - - if (strlen(tsCharset) == 0) { - uError("failed to get charset, please set the valid charset in config file"); - exit(-1); - } - - if (!taosValidateEncodec(tsCharset)) { - uError("Invalid charset:%s, please set the valid charset in config file", tsCharset); - exit(-1); - } -} \ No newline at end of file diff --git a/source/common/src/ttszip.c b/source/common/src/ttszip.c index 6d57992c35bab4b8cea04888f1cf78ab9417bcb2..3265ea55476025e14357e0c7b021d93416faf763 100644 --- a/source/common/src/ttszip.c +++ b/source/common/src/ttszip.c @@ -23,7 +23,7 @@ STSBuf* tsBufCreate(bool autoDelete, int32_t order) { pTSBuf->autoDelete = autoDelete; - taosGetTmpfilePath(tsTempDir, "join", pTSBuf->path); + taosGetTmpfilePath(osTempDir(), "join", pTSBuf->path); pTSBuf->f = fopen(pTSBuf->path, "wb+"); if (pTSBuf->f == NULL) { free(pTSBuf); diff --git a/source/dnode/mgmt/daemon/src/dmnCfg.c b/source/dnode/mgmt/daemon/src/dmnCfg.c index 52aa22a53323a944b2074d44000c7f164c8c4b15..65c3e67d974940448eb9f7d40bca432e6543d79a 100644 --- a/source/dnode/mgmt/daemon/src/dmnCfg.c +++ b/source/dnode/mgmt/daemon/src/dmnCfg.c @@ -15,8 +15,6 @@ #define _DEFAULT_SOURCE #include "dmnInt.h" -#include "tlocale.h" -#include "ttimezone.h" static int32_t dmnAddEpCfg(SConfig *pCfg) { char defaultFqdn[TSDB_FQDN_LEN] = {0}; @@ -40,18 +38,18 @@ static int32_t dmnAddEpCfg(SConfig *pCfg) { } static int32_t dmnAddDirCfg(SConfig *pCfg) { - if (cfgAddDir(pCfg, "dataDir", tsDataDir) != 0) return -1; - if (cfgAddDir(pCfg, "tempDir", tsTempDir) != 0) return -1; + if (cfgAddDir(pCfg, "dataDir", osDataDir()) != 0) return -1; + if (cfgAddDir(pCfg, "tempDir", osTempDir()) != 0) return -1; if (cfgAddFloat(pCfg, "minimalDataDirGB", 2.0f, 0.001f, 10000000) != 0) return -1; if (cfgAddFloat(pCfg, "minimalTempDirGB", 1.0f, 0.001f, 10000000) != 0) return -1; return 0; } static int32_t dmnCheckDirCfg(SConfig *pCfg) { - tstrncpy(tsDataDir, cfgGetItem(pCfg, "dataDir")->str, PATH_MAX); - tstrncpy(tsTempDir, cfgGetItem(pCfg, "tempDir")->str, PATH_MAX); - tsDataSpace.reserved = cfgGetItem(pCfg, "minimalDataDirGB")->fval; - tsTempSpace.reserved = cfgGetItem(pCfg, "minimalTempDirGB")->fval; + osSetDataDir(cfgGetItem(pCfg, "dataDir")->str); + osSetTempDir(cfgGetItem(pCfg, "tempDir")->str); + osSetTempReservedSpace(cfgGetItem(pCfg, "minimalDataDirGB")->fval); + osSetDataReservedSpace(cfgGetItem(pCfg, "minimalTempDirGB")->fval); return 0; } @@ -86,18 +84,25 @@ static int32_t dmnAddDnodeCfg(SConfig *pCfg) { return 0; } +static void dmnSetDnodeCfg(SConfig *pCfg) { + SConfigItem *pItem = cfgGetItem(pCfg, "timezone"); + osSetTimezone(pItem->str); + uDebug("timezone format changed from %s to %s", pItem->str, osTimezone()); + cfgSetItem(pCfg, "timezone", osTimezone(), pItem->stype); +} + static int32_t dmnCheckCfg(SConfig *pCfg) { bool enableCore = cfgGetItem(pCfg, "enableCoreFile")->bval; taosSetCoreDump(enableCore); + dmnSetDnodeCfg(pCfg); + if (dmnCheckDirCfg(pCfg) != 0) { return -1; } taosGetSystemInfo(); - tsSetTimeZone(); - tsSetLocale(); if (tsNumOfCores <= 0) { tsNumOfCores = 1; diff --git a/source/dnode/mgmt/daemon/src/dmnLog.c b/source/dnode/mgmt/daemon/src/dmnLog.c index 22a7d7b080a99d0d7773431b4a880187ede74811..147357c845fd675843f4f8fcb3b25c9b76f03614 100644 --- a/source/dnode/mgmt/daemon/src/dmnLog.c +++ b/source/dnode/mgmt/daemon/src/dmnLog.c @@ -17,7 +17,7 @@ #include "dmnInt.h" int32_t dmnAddLogCfg(SConfig *pCfg) { - if (cfgAddDir(pCfg, "logDir", "/var/log/taos") != 0) return -1; + if (cfgAddDir(pCfg, "logDir", osLogDir()) != 0) return -1; if (cfgAddFloat(pCfg, "minimalLogDirGB", 1.0f, 0.001f, 10000000) != 0) return -1; if (cfgAddBool(pCfg, "asyncLog", 1) != 0) return -1; if (cfgAddInt32(pCfg, "numOfLogLines", 10000000, 1000, 2000000000) != 0) return -1; @@ -41,8 +41,8 @@ int32_t dmnAddLogCfg(SConfig *pCfg) { } int32_t dmnSetLogCfg(SConfig *pCfg) { - tstrncpy(tsLogDir, cfgGetItem(pCfg, "logDir")->str, PATH_MAX); - tsLogSpace.reserved = cfgGetItem(pCfg, "minimalLogDirGB")->fval; + osSetLogDir(cfgGetItem(pCfg, "logDir")->str); + osSetLogReservedSpace(cfgGetItem(pCfg, "minimalLogDirGB")->fval); tsAsyncLog = cfgGetItem(pCfg, "asyncLog")->bval; tsNumOfLogLines = cfgGetItem(pCfg, "numOfLogLines")->i32; tsLogKeepDays = cfgGetItem(pCfg, "logKeepDays")->i32; diff --git a/source/dnode/mgmt/daemon/src/dmnMain.c b/source/dnode/mgmt/daemon/src/dmnMain.c index 1f1d2d8d052ac4257c3a307929d66933a2843a3b..62f0db5fc52f982870153c8708ae15ef5f3cfb32 100644 --- a/source/dnode/mgmt/daemon/src/dmnMain.c +++ b/source/dnode/mgmt/daemon/src/dmnMain.c @@ -97,6 +97,8 @@ int32_t dmnRunDnode(SConfig *pCfg) { } int main(int argc, char const *argv[]) { + osInit(); + if (dmnParseOption(argc, argv) != 0) { return -1; } diff --git a/source/dnode/mgmt/impl/src/dndMgmt.c b/source/dnode/mgmt/impl/src/dndMgmt.c index 1748c52c66b614c5e8304a8cb9be6c462c37c347..b7f42fb465623687f468bb51874d1520f17abc7b 100644 --- a/source/dnode/mgmt/impl/src/dndMgmt.c +++ b/source/dnode/mgmt/impl/src/dndMgmt.c @@ -371,9 +371,9 @@ void dndSendStatusReq(SDnode *pDnode) { req.clusterCfg.checkTime = 0; char timestr[32] = "1970-01-01 00:00:00.00"; (void)taosParseTime(timestr, &req.clusterCfg.checkTime, (int32_t)strlen(timestr), TSDB_TIME_PRECISION_MILLI, 0); - memcpy(req.clusterCfg.timezone, pDnode->env.timezone, TSDB_TIMEZONE_LEN); - memcpy(req.clusterCfg.locale, pDnode->env.locale, TSDB_LOCALE_LEN); - memcpy(req.clusterCfg.charset, pDnode->env.charset, TSDB_LOCALE_LEN); + memcpy(req.clusterCfg.timezone, pDnode->env.timezone, TD_TIMEZONE_LEN); + memcpy(req.clusterCfg.locale, pDnode->env.locale, TD_LOCALE_LEN); + memcpy(req.clusterCfg.charset, pDnode->env.charset, TD_LOCALE_LEN); taosRUnLockLatch(&pMgmt->latch); req.pVloads = taosArrayInit(TSDB_MAX_VNODES, sizeof(SVnodeLoad)); diff --git a/source/dnode/mgmt/impl/test/sut/src/sut.cpp b/source/dnode/mgmt/impl/test/sut/src/sut.cpp index 9863fd9f54e7879df574c1e343387a35e9a0184f..5d2abd86c35cbe3a2ef8e227c131dc58b416782d 100644 --- a/source/dnode/mgmt/impl/test/sut/src/sut.cpp +++ b/source/dnode/mgmt/impl/test/sut/src/sut.cpp @@ -33,7 +33,7 @@ void Testbase::InitLog(const char* path) { taosRemoveDir(path); taosMkDir(path); - tstrncpy(tsLogDir, path, PATH_MAX); + osSetLogDir(path); if (taosInitLog("taosdlog", 1) != 0) { printf("failed to init log file\n"); } diff --git a/source/libs/catalog/test/catalogTests.cpp b/source/libs/catalog/test/catalogTests.cpp index ebe20fbb7fb9053463b265ffd1442527e35f1e3c..9dfe6eac3fcc06e8210191513057e35398cd1526 100644 --- a/source/libs/catalog/test/catalogTests.cpp +++ b/source/libs/catalog/test/catalogTests.cpp @@ -132,7 +132,7 @@ void ctgTestInitLogFile() { ctgDbgEnableDebug("api"); if (taosInitLog(defaultLogFileNamePrefix, maxLogFileNum) < 0) { - printf("failed to open log file in directory:%s\n", tsLogDir); + printf("failed to open log file in directory:%s\n", osLogDir()); } } diff --git a/source/libs/config/src/config.c b/source/libs/config/src/config.c index 17a652d2b5a7cb509af2d93798faf7594b25a00a..b23826ceacc696669af94c2dbc729897e2fa5efd 100644 --- a/source/libs/config/src/config.c +++ b/source/libs/config/src/config.c @@ -16,9 +16,7 @@ #define _DEFAULT_SOURCE #include "cfgInt.h" #include "tep.h" -#include "tlocale.h" #include "tmsg.h" -#include "ttimezone.h" #define CFG_NAME_PRINT_LEN 22 #define CFG_SRC_PRINT_LEN 12 @@ -593,16 +591,16 @@ void cfgDumpCfg(SConfig *pCfg) { // pItem = cfgGetItem(pCfg, "dataDir"); // if (pItem != NULL) { -// tstrncpy(tsDataDir, pItem->str, PATH_MAX); +// tstrncpy(osDataDir(), pItem->str, PATH_MAX); // } // if (tsDiskCfgNum <= 0) { -// taosAddDataDir(0, tsDataDir, 0, 1); +// taosAddDataDir(0, osDataDir(), 0, 1); // tsDiskCfgNum = 1; -// uTrace("dataDir:%s, level:0 primary:1 is configured by default", tsDataDir); +// uTrace("dataDir:%s, level:0 primary:1 is configured by default", osDataDir()); // } -// if (taosDirExist(tsTempDir) != 0) { +// if (taosDirExist(osTempDir()) != 0) { // return -1; // } diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index 62c0e3623fbd520bf0e791d5623cf3f3e5e28804..cc05d433eb013b32abaed70290fbdeb0b7208584 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -4629,7 +4629,7 @@ int32_t doInitQInfo(SQInfo* pQInfo, STSBuf* pTsBuf, void* tsdb, void* sourceOptr getIntermediateBufInfo(pRuntimeEnv, &ps, &pQueryAttr->intermediateResultRowSize); int32_t TENMB = 1024*1024*10; - int32_t code = createDiskbasedBuffer(&pRuntimeEnv->pResultBuf, ps, TENMB, pQInfo->qId, tsTempDir); + int32_t code = createDiskbasedBuffer(&pRuntimeEnv->pResultBuf, ps, TENMB, pQInfo->qId, osTempDir()); if (code != TSDB_CODE_SUCCESS) { return code; } diff --git a/source/libs/function/src/tpercentile.c b/source/libs/function/src/tpercentile.c index 40731adc58326da548bd53d4de6f2825efeff021..e58cdf8802d7aa48d02e87eb07d2319b60e98a0d 100644 --- a/source/libs/function/src/tpercentile.c +++ b/source/libs/function/src/tpercentile.c @@ -254,7 +254,7 @@ tMemBucket *tMemBucketCreate(int16_t nElemSize, int16_t dataType, double minval, resetSlotInfo(pBucket); - int32_t ret = createDiskbasedBuffer(&pBucket->pBuffer, pBucket->bufPageSize, pBucket->bufPageSize * 512, 1, tsTempDir); + int32_t ret = createDiskbasedBuffer(&pBucket->pBuffer, pBucket->bufPageSize, pBucket->bufPageSize * 512, 1, osTempDir()); if (ret != 0) { tMemBucketDestroy(pBucket); return NULL; diff --git a/source/libs/function/src/tudf.c b/source/libs/function/src/tudf.c index b65e637a57496486919f0114dd633077f337d8d1..98bcf189b0809ff385517f3507825d378f59324a 100644 --- a/source/libs/function/src/tudf.c +++ b/source/libs/function/src/tudf.c @@ -55,7 +55,7 @@ int32_t initUdfInfo(SUdfInfo* pUdfInfo) { } else { char path[PATH_MAX] = {0}; - taosGetTmpfilePath("script", path, tsTempDir); + taosGetTmpfilePath("script", path, osTempDir()); FILE* file = fopen(path, "w+"); diff --git a/source/libs/index/test/fstUT.cc b/source/libs/index/test/fstUT.cc index d59a3428da2ca377444234d77850ea4d7afadb26..0e16f57f58876369911948785ed328e028162a43 100644 --- a/source/libs/index/test/fstUT.cc +++ b/source/libs/index/test/fstUT.cc @@ -30,7 +30,7 @@ static void EnvInit() { taosRemoveDir(path.c_str()); taosMkDir(path.c_str()); // init log file - tstrncpy(tsLogDir, path.c_str(), PATH_MAX); + osSetLogDir( path.c_str()); if (taosInitLog("tindex.idx", 1) != 0) { printf("failed to init log"); } diff --git a/source/libs/parser/src/insertParser.c b/source/libs/parser/src/insertParser.c index 745982e869c6bf092babd2369fd2420f9a99c2b4..a88f679655b31bdf487428f892dc61751ab338b9 100644 --- a/source/libs/parser/src/insertParser.c +++ b/source/libs/parser/src/insertParser.c @@ -204,7 +204,7 @@ static int parseTime(char **end, SToken *pToken, int16_t timePrec, int64_t *time bool isSigned = false; toInteger(pToken->z, pToken->n, 10, &ts, &isSigned); } else { // parse the RFC-3339/ISO-8601 timestamp format string - if (taosParseTime(pToken->z, time, pToken->n, timePrec, tsDaylight) != TSDB_CODE_SUCCESS) { + if (taosParseTime(pToken->z, time, pToken->n, timePrec, osDaylight()) != TSDB_CODE_SUCCESS) { return buildSyntaxErrMsg(pMsgBuf, "invalid timestamp format", pToken->z); } diff --git a/source/libs/parser/src/parserImpl.c b/source/libs/parser/src/parserImpl.c index ef040fdff47ff925acfbdc08071147d2eb56bf74..8e29f66c574eddafaec8b0507da06b180dbcc468 100644 --- a/source/libs/parser/src/parserImpl.c +++ b/source/libs/parser/src/parserImpl.c @@ -578,7 +578,7 @@ static EDealRes translateValue(STranslateContext* pCxt, SValueNode* pVal) { return DEAL_RES_ERROR; } int32_t len = trimStringCopy(pVal->literal, n, tmp); - if (taosParseTime(tmp, &pVal->datum.i, len, pVal->node.resType.precision, tsDaylight) != TSDB_CODE_SUCCESS) { + if (taosParseTime(tmp, &pVal->datum.i, len, pVal->node.resType.precision, osDaylight()) != TSDB_CODE_SUCCESS) { tfree(tmp); generateSyntaxErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, pVal->literal); return DEAL_RES_ERROR; diff --git a/source/libs/parser/src/parserUtil.c b/source/libs/parser/src/parserUtil.c index ec68980c447ac5324660779949533d0826480480..2647806e03ad796c94a4cda6ace4dfd8acf0ee58 100644 --- a/source/libs/parser/src/parserUtil.c +++ b/source/libs/parser/src/parserUtil.c @@ -1639,7 +1639,7 @@ static int parseTime(char **end, SToken *pToken, int16_t timePrec, int64_t *time bool isSigned = false; toInteger(pToken->z, pToken->n, 10, &ts, &isSigned); } else { // parse the RFC-3339/ISO-8601 timestamp format string - if (taosParseTime(pToken->z, time, pToken->n, timePrec, tsDaylight) != TSDB_CODE_SUCCESS) { + if (taosParseTime(pToken->z, time, pToken->n, timePrec, osDaylight()) != TSDB_CODE_SUCCESS) { return buildSyntaxErrMsg(pMsgBuf, "invalid timestamp format", pToken->z); } diff --git a/source/libs/qworker/test/qworkerTests.cpp b/source/libs/qworker/test/qworkerTests.cpp index 8ad5a76388e45c10aee8df05f91629338d7a0f02..d8df9a81c4f8a0480ce775ec8d62ffd764de2117 100644 --- a/source/libs/qworker/test/qworkerTests.cpp +++ b/source/libs/qworker/test/qworkerTests.cpp @@ -102,7 +102,7 @@ void qwtInitLogFile() { qDebugFlag = 159; if (taosInitLog(defaultLogFileNamePrefix, maxLogFileNum) < 0) { - printf("failed to open log file in directory:%s\n", tsLogDir); + printf("failed to open log file in directory:%s\n", osLogDir()); } } diff --git a/source/libs/scalar/test/filter/filterTests.cpp b/source/libs/scalar/test/filter/filterTests.cpp index a159263804d3c201d914a2ffb9600beb3aef6944..d27fe2c25ff7dbeb93dccae165ae4db042443ca2 100644 --- a/source/libs/scalar/test/filter/filterTests.cpp +++ b/source/libs/scalar/test/filter/filterTests.cpp @@ -53,7 +53,7 @@ void flttInitLogFile() { qDebugFlag = 159; if (taosInitLog(defaultLogFileNamePrefix, maxLogFileNum) < 0) { - printf("failed to open log file in directory:%s\n", tsLogDir); + printf("failed to open log file in directory:%s\n", osLogDir()); } } diff --git a/source/libs/scalar/test/scalar/scalarTests.cpp b/source/libs/scalar/test/scalar/scalarTests.cpp index 24bc8eaf40bb4a5603eeb7dee40d39ba0070f59c..de2c7f587468ac36ca06db602967cadc0136d181 100644 --- a/source/libs/scalar/test/scalar/scalarTests.cpp +++ b/source/libs/scalar/test/scalar/scalarTests.cpp @@ -52,7 +52,7 @@ void scltInitLogFile() { qDebugFlag = 159; if (taosInitLog(defaultLogFileNamePrefix, maxLogFileNum) < 0) { - printf("failed to open log file in directory:%s\n", tsLogDir); + printf("failed to open log file in directory:%s\n", osLogDir()); } } diff --git a/source/libs/scheduler/test/schedulerTests.cpp b/source/libs/scheduler/test/schedulerTests.cpp index 89d365a7e7fe2410a5cfa8e3e7168b28f096540d..70684412ee28d88a32d67f47301453dacd84c02b 100644 --- a/source/libs/scheduler/test/schedulerTests.cpp +++ b/source/libs/scheduler/test/schedulerTests.cpp @@ -67,7 +67,7 @@ void schtInitLogFile() { qDebugFlag = 159; if (taosInitLog(defaultLogFileNamePrefix, maxLogFileNum) < 0) { - printf("failed to open log file in directory:%s\n", tsLogDir); + printf("failed to open log file in directory:%s\n", osLogDir()); } } diff --git a/source/libs/transport/test/transUT.cc b/source/libs/transport/test/transUT.cc index f5b3ed4c3203808718090c27af8fb073bd6c81f5..8a8a6de5e12895c1d161e59541e11039c872a8cc 100644 --- a/source/libs/transport/test/transUT.cc +++ b/source/libs/transport/test/transUT.cc @@ -155,7 +155,7 @@ class TransObj { taosRemoveDir(path.c_str()); taosMkDir(path.c_str()); - tstrncpy(tsLogDir, path.c_str(), PATH_MAX); + osSetLogDir(path.c_str()); if (taosInitLog("taosdlog", 1) != 0) { printf("failed to init log file\n"); } diff --git a/source/os/src/osDir.c b/source/os/src/osDir.c index 8fee6a6f7dab26d7a10586b58e67f0762c79b416..c464073e5faeb6a9a08da886268f469189b2fbf1 100644 --- a/source/os/src/osDir.c +++ b/source/os/src/osDir.c @@ -71,7 +71,7 @@ int32_t taosMkDir(const char *dirname) { return code; } -void taosRemoveOldFiles(char *dirname, int32_t keepDays) { +void taosRemoveOldFiles(const char *dirname, int32_t keepDays) { DIR *dir = opendir(dirname); if (dir == NULL) return; diff --git a/source/os/src/osEnv.c b/source/os/src/osEnv.c index 7417c6ff8443af4a2da8ebb8bd1c339f72323ed7..6fad7e4f3265fa65a106b022f84cb403b9e6a387 100644 --- a/source/os/src/osEnv.c +++ b/source/os/src/osEnv.c @@ -13,77 +13,100 @@ * along with this program. If not, see . */ - #define _DEFAULT_SOURCE -#include "os.h" #include "osEnv.h" -#include "osSysinfo.h" - -SDiskSpace tsLogSpace; -SDiskSpace tsTempSpace; -SDiskSpace tsDataSpace; - -void taosUpdateLogSpace() { taosGetDiskSize(tsLogDir, &tsLogSpace.size); } - -void taosUpdateTempSpace() { taosGetDiskSize(tsTempDir, &tsTempSpace.size); } - -void taosUpdateDataSpace() { taosGetDiskSize(tsDataDir, &tsDataSpace.size); } - -bool taosLogSpaceAvailable() { return tsLogSpace.reserved < tsLogSpace.size.avail; } - -bool taosTempSpaceAvailable() { return tsTempSpace.reserved < tsTempSpace.size.avail; } -bool taosDataSpaceAvailable() { return tsDataSpace.reserved < tsDataSpace.size.avail; } - -void taosUpdateAllSpace() { - taosUpdateLogSpace(); - taosUpdateTempSpace(); - taosUpdateDataSpace(); +extern void taosWinSocketInit(); +char configDir[PATH_MAX] = {0}; + +typedef struct SOsEnv { + char dataDir[PATH_MAX]; + char logDir[PATH_MAX]; + char tempDir[PATH_MAX]; + SDiskSpace dataSpace; + SDiskSpace logSpace; + SDiskSpace tempSpace; + char osName[16]; + char timezone[TD_TIMEZONE_LEN]; + char locale[TD_LOCALE_LEN]; + char charset[TD_CHARSET_LEN]; + int8_t daylight; +} SOsEnv; + +static SOsEnv env = {0}; + +SOsEnv *osEnv() { return &env; } + +void osInitImp() { + taosGetSystemLocale(env.locale, env.charset); + taosGetSystemTimezone(env.timezone); + osSetTimezone(env.timezone); } -#if defined(_TD_WINDOWS_64) || defined(_TD_WINDOWS_32) - -char tsOsName[10] = "Windows"; -char configDir[PATH_MAX] = "C:/TDengine/cfg"; -char tsDataDir[PATH_MAX] = "C:/TDengine/data"; -char tsLogDir[PATH_MAX] = "C:/TDengine/log"; -char tsTempDir[PATH_MAX] = "C:\\Windows\\Temp"; +void osUpdate() { + if (env.logDir[0] != 0) { + taosGetDiskSize(env.logDir, &env.logSpace.size); + } + if (env.dataDir[0] != 0) { + taosGetDiskSize(env.dataDir, &env.dataSpace.size); + } + if (env.tempDir[0] != 0) { + taosGetDiskSize(env.tempDir, &env.tempSpace.size); + } +} -extern taosWinSocketInit(); +bool osLogSpaceAvailable() { return env.logSpace.reserved <= env.logSpace.size.avail; } +int8_t osDaylight() { return env.daylight; } + +const char *osLogDir() { return env.logDir; } +const char *osTempDir() { return env.tempDir; } +const char *osDataDir() { return env.dataDir; } +const char *osName() { return env.osName; } +const char *osTimezone() { return env.timezone; } +const char *osLocale() { return env.locale; } +const char *osCharset() { return env.charset; } + +void osSetLogDir(const char *logDir) { tstrncpy(env.logDir, logDir, PATH_MAX); } +void osSetTempDir(const char *tempDir) { tstrncpy(env.tempDir, tempDir, PATH_MAX); } +void osSetDataDir(const char *dataDir) { tstrncpy(env.dataDir, dataDir, PATH_MAX); } +void osSetLogReservedSpace(float sizeInGB) { env.logSpace.reserved = sizeInGB; } +void osSetTempReservedSpace(float sizeInGB) { env.tempSpace.reserved = sizeInGB; } +void osSetDataReservedSpace(float sizeInGB) { env.dataSpace.reserved = sizeInGB; } +void osSetTimezone(const char *timezone) { taosSetSystemTimezone(timezone, env.timezone, &env.daylight); } void osInit() { + srand(taosSafeRand()); + +#if defined(_TD_WINDOWS_64) || defined(_TD_WINDOWS_32) taosWinSocketInit(); const char *tmpDir = getenv("tmp"); if (tmpDir == NULL) { tmpDir = getenv("temp"); } - if (tmpDir != NULL) { - strcpy(tsTempDir, tmpDir); + strcpy(env.tempDir, tmpDir); } -} - -#elif defined(_TD_DARWIN_64) -char tsOsName[10] = "Darwin"; -char configDir[PATH_MAX] = "/usr/local/etc/taos"; -char tsDataDir[PATH_MAX] = "/usr/local/var/lib/taos"; -char tsLogDir[PATH_MAX] = "/usr/local/var/log/taos"; -char tsTempDir[PATH_MAX] = "/tmp/taosd"; + strcpy(configDir, "C:\\TDengine\\cfg"); + strcpy(env.dataDir, "C:\\TDengine\\data"); + strcpy(env.logDir, "C:\\TDengine\\log"); + strcpy(env.tempDir, "C:\\Windows\\Temp"); + strcpy(env.osName, "Windows"); -void osInit() {} +#elif defined(_TD_DARWIN_64) + strcpy(configDir, "/tmp/taosd"); + strcpy(env.dataDir, "/usr/local/var/lib/taos"); + strcpy(env.logDir, "/usr/local/var/log/taos"); + strcpy(env.tempDir, "/usr/local/etc/taos"); + strcpy(env.osName, "Darwin"); #else - -char tsOsName[10] = "Linux"; -char configDir[PATH_MAX] = "/etc/taos"; -char tsDataDir[PATH_MAX] = "/var/lib/taos"; -char tsLogDir[PATH_MAX] = "/var/log/taos"; -char tsTempDir[PATH_MAX] = "/tmp/"; - -void osInit() { - srand(taosSafeRand()); -} + strcpy(configDir, "/etc/taos"); + strcpy(env.dataDir, "/var/lib/taos"); + strcpy(env.logDir, "/var/log/taos"); + strcpy(env.tempDir, "/tmp"); + strcpy(env.osName, "Linux"); #endif +} \ No newline at end of file diff --git a/source/os/src/osLocale.c b/source/os/src/osLocale.c new file mode 100644 index 0000000000000000000000000000000000000000..e006a337a0817a9f94d0d694ead331c20d4a1dff --- /dev/null +++ b/source/os/src/osLocale.c @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#define _DEFAULT_SOURCE +#include "osLocale.h" + +#if defined(_TD_WINDOWS_64) || defined(_TD_WINDOWS_32) +#if (_WIN64) +#include +#include +#include +#include +#include +#include +#pragma comment(lib, "Mswsock.lib ") +#endif +#include +#pragma warning(push) +#pragma warning(disable : 4091) +#include +#pragma warning(pop) +#elif defined(_TD_DARWIN_64) +#include +#include +#else +#include +#include +#include +#include +#include +#include +#include +#include +#endif + +typedef struct CharsetPair { + char *oldCharset; + char *newCharset; +} CharsetPair; + +char *taosCharsetReplace(char *charsetstr) { + CharsetPair charsetRep[] = { + {"utf8", "UTF-8"}, + {"936", "CP936"}, + }; + + for (int32_t i = 0; i < tListLen(charsetRep); ++i) { + if (strcasecmp(charsetRep[i].oldCharset, charsetstr) == 0) { + return strdup(charsetRep[i].newCharset); + } + } + + return strdup(charsetstr); +} + +/** + * In some Linux systems, setLocale(LC_CTYPE, "") may return NULL, in which case the launch of + * both the TDengine Server and the Client may be interrupted. + * + * In case that the setLocale failed to be executed, the right charset needs to be set. + */ +void taosSetSystemLocale(const char *inLocale, const char *inCharSet) { + char *locale = setlocale(LC_CTYPE, inLocale); + + // default locale or user specified locale is not valid, abort launch + if (inLocale == NULL) { + printf("Invalid locale:%s, please set the valid locale in config file\n", inLocale); + } + + if (strlen(inCharSet) == 0) { + printf("failed to get charset, please set the valid charset in config file\n"); + exit(-1); + } + + if (!taosValidateEncodec(inCharSet)) { + printf("Invalid charset:%s, please set the valid charset in config file", inCharSet); + exit(-1); + } +} + +void taosGetSystemLocale(char *outLocale, char *outCharset) { +#if defined(_TD_WINDOWS_64) || defined(_TD_WINDOWS_32) + char *locale = setlocale(LC_CTYPE, "chs"); + if (locale != NULL) { + tstrncpy(outLocale, locale, TD_LOCALE_LEN); + } + strcpy(outCharset, "cp936"); + +#elif defined(_TD_DARWIN_64) + /* + * originally from src/os/src/detail/osSysinfo.c + * POSIX format locale string: + * (Language Strings)_(Country/Region Strings).(code_page) + * + * example: en_US.UTF-8, zh_CN.GB18030, zh_CN.UTF-8, + * + * if user does not specify the locale in taos.cfg the program use default LC_CTYPE as system locale. + * + * In case of some CentOS systems, their default locale is "en_US.utf8", which is not valid code_page + * for libiconv that is employed to convert string in this system. This program will automatically use + * UTF-8 instead as the charset. + * + * In case of windows client, the locale string is not valid POSIX format, user needs to set the + * correct code_page for libiconv. Usually, the code_page of windows system with simple chinese is + * CP936, CP437 for English charset. + * + */ + + char sep = '.'; + char *locale = NULL; + + locale = setlocale(LC_CTYPE, ""); + if (locale == NULL) { + // printf("can't get locale from system, set it to en_US.UTF-8 since error:%d:%s", errno, strerror(errno)); + strcpy(outLocale, "en_US.UTF-8"); + } else { + tstrncpy(outLocale, locale, TD_LOCALE_LEN); + // printf("locale not configured, set to system default:%s", outLocale); + } + + /* if user does not specify the charset, extract it from locale */ + char *str = strrchr(outLocale, sep); + if (str != NULL) { + str++; + + char *revisedCharset = taosCharsetReplace(str); + tstrncpy(outCharset, revisedCharset, TD_CHARSET_LEN); + + free(revisedCharset); + // printf("charset not configured, set to system default:%s", outCharset); + } else { + strcpy(outCharset, "UTF-8"); + // printf("can't get locale and charset from system, set it to UTF-8"); + } + +#else + /* + * POSIX format locale string: + * (Language Strings)_(Country/Region Strings).(code_page) + * + * example: en_US.UTF-8, zh_CN.GB18030, zh_CN.UTF-8, + * + * if user does not specify the locale in taos.cfg the program use default LC_CTYPE as system locale. + * + * In case of some CentOS systems, their default locale is "en_US.utf8", which is not valid code_page + * for libiconv that is employed to convert string in this system. This program will automatically use + * UTF-8 instead as the charset. + * + * In case of windows client, the locale string is not valid POSIX format, user needs to set the + * correct code_page for libiconv. Usually, the code_page of windows system with simple chinese is + * CP936, CP437 for English charset. + * + */ + char sep = '.'; + char *locale = NULL; + + locale = setlocale(LC_CTYPE, ""); + if (locale == NULL) { + // printf("can't get locale from system, set it to en_US.UTF-8 since error:%d:%s", errno, strerror(errno)); + strcpy(outLocale, "en_US.UTF-8"); + } else { + tstrncpy(outLocale, locale, TD_LOCALE_LEN); + // printf("locale not configured, set to system default:%s", outLocale); + } + + // if user does not specify the charset, extract it from locale + char *str = strrchr(outLocale, sep); + if (str != NULL) { + str++; + + char *revisedCharset = taosCharsetReplace(str); + tstrncpy(outCharset, revisedCharset, TD_LOCALE_LEN); + + free(revisedCharset); + // printf("charset not configured, set to system default:%s", outCharset); + } else { + strcpy(outCharset, "UTF-8"); + // printf("can't get locale and charset from system, set it to UTF-8"); + } + +#endif +} diff --git a/source/os/src/osString.c b/source/os/src/osString.c index f714fd0dc4d26cf9f5c1391b34c6277b971cd74d..88ea4b3e1521103b4827c7b5646ec2ed92b556e6 100644 --- a/source/os/src/osString.c +++ b/source/os/src/osString.c @@ -18,24 +18,6 @@ #include #include -typedef struct CharsetPair { - char *oldCharset; - char *newCharset; -} CharsetPair; - -char *taosCharsetReplace(char *charsetstr) { - CharsetPair charsetRep[] = { - { "utf8", "UTF-8" }, { "936", "CP936" }, - }; - - for (int32_t i = 0; i < tListLen(charsetRep); ++i) { - if (strcasecmp(charsetRep[i].oldCharset, charsetstr) == 0) { - return strdup(charsetRep[i].newCharset); - } - } - - return strdup(charsetstr); -} int64_t taosStr2int64(const char *str) { char *endptr = NULL; diff --git a/source/os/src/osSysinfo.c b/source/os/src/osSysinfo.c index cae1b18b3c3dc876d9a7b2b54b1e4735ec417e4c..4a8cc5ecbc92656bd372af9684039339ccca33c8 100644 --- a/source/os/src/osSysinfo.c +++ b/source/os/src/osSysinfo.c @@ -21,10 +21,6 @@ int64_t tsPageSize = 0; int64_t tsOpenMax = 0; int64_t tsStreamMax = 0; int32_t tsNumOfCores = 1; -char tsTimezone[TSDB_TIMEZONE_LEN] = {0}; -char tsLocale[TSDB_LOCALE_LEN] = {0}; -char tsCharset[TSDB_LOCALE_LEN] = {0}; // default encode string - #if defined(_TD_WINDOWS_64) || defined(_TD_WINDOWS_32) /* @@ -89,25 +85,6 @@ bool taosGetProcMemory(float *memoryUsedMB) { return true; } -static void taosGetSystemTimezone() { - // get and set default timezone - char *tz = getenv("TZ"); - if (tz == NULL || strlen(tz) == 0) { - strcpy(tsTimezone, "not configured"); - } else { - strcpy(tsTimezone, tz); - } -} - -static void taosGetSystemLocale() { - // get and set default locale - char *locale = setlocale(LC_CTYPE, "chs"); - if (locale != NULL) { - tstrncpy(tsLocale, locale, TSDB_LOCALE_LEN); - } - - strcpy(tsCharset, "cp936"); -} int32_t taosGetCpuCores() { SYSTEM_INFO info; @@ -134,7 +111,7 @@ int32_t taosGetDiskSize(char *dataDir, SDiskSize *diskSize) { diskSize->used = (int64_t)(i64TotalBytes - i64FreeBytes); return 0; } else { - //printf("failed to get disk size, dataDir:%s errno:%s", tsDataDir, strerror(errno)); + //printf("failed to get disk size, dataDir:%s errno:%s", osDataDir(), strerror(errno)); terrno = TAOS_SYSTEM_ERROR(errno); return -1; } @@ -200,8 +177,6 @@ void taosGetSystemInfo() { taosGetCpuUsage(&tmp1, &tmp2); taosGetProcIO(&tmp1, &tmp2); - taosGetSystemTimezone(); - taosGetSystemLocale(); } void taosKillSystem() { @@ -273,103 +248,6 @@ char *taosGetCmdlineByPID(int pid) { return ""; } #include #include -static void taosGetSystemTimezone() { - /* load time zone string from /etc/localtime */ - char buf[4096]; - char *tz = NULL; - { - int n = readlink("/etc/localtime", buf, sizeof(buf)); - if (n < 0) { - //printf("read /etc/localtime error, reason:%s", strerror(errno)); - return; - } - buf[n] = '\0'; - for (int i = n - 1; i >= 0; --i) { - if (buf[i] == '/') { - if (tz) { - tz = buf + i + 1; - break; - } - tz = buf + i + 1; - } - } - if (!tz || 0 == strchr(tz, '/')) { - //printf("parsing /etc/localtime failed"); - return; - } - - setenv("TZ", tz, 1); - tzset(); - } - - /* - * NOTE: do not remove it. - * Enforce set the correct daylight saving time(DST) flag according - * to current time - */ - time_t tx1 = time(NULL); - struct tm tm1; - localtime_r(&tx1, &tm1); - - /* - * format example: - * - * Asia/Shanghai (CST, +0800) - * Europe/London (BST, +0100) - */ - snprintf(tsTimezone, TSDB_TIMEZONE_LEN, "%s (%s, %+03ld00)", tz, tm1.tm_isdst ? tzname[daylight] : tzname[0], - -timezone / 3600); - - // cfg_timezone->cfgStatus = TAOS_CFG_CSTATUS_DEFAULT; - //printf("timezone not configured, set to system default:%s", tsTimezone); -} - -/* - * originally from src/os/src/detail/osSysinfo.c - * POSIX format locale string: - * (Language Strings)_(Country/Region Strings).(code_page) - * - * example: en_US.UTF-8, zh_CN.GB18030, zh_CN.UTF-8, - * - * if user does not specify the locale in taos.cfg the program use default LC_CTYPE as system locale. - * - * In case of some CentOS systems, their default locale is "en_US.utf8", which is not valid code_page - * for libiconv that is employed to convert string in this system. This program will automatically use - * UTF-8 instead as the charset. - * - * In case of windows client, the locale string is not valid POSIX format, user needs to set the - * correct code_page for libiconv. Usually, the code_page of windows system with simple chinese is - * CP936, CP437 for English charset. - * - */ -static void taosGetSystemLocale() { // get and set default locale - char sep = '.'; - char *locale = NULL; - - locale = setlocale(LC_CTYPE, ""); - if (locale == NULL) { - //printf("can't get locale from system, set it to en_US.UTF-8 since error:%d:%s", errno, strerror(errno)); - strcpy(tsLocale, "en_US.UTF-8"); - } else { - tstrncpy(tsLocale, locale, TSDB_LOCALE_LEN); - //printf("locale not configured, set to system default:%s", tsLocale); - } - - /* if user does not specify the charset, extract it from locale */ - char *str = strrchr(tsLocale, sep); - if (str != NULL) { - str++; - - char *revisedCharset = taosCharsetReplace(str); - tstrncpy(tsCharset, revisedCharset, TSDB_LOCALE_LEN); - - free(revisedCharset); - //printf("charset not configured, set to system default:%s", tsCharset); - } else { - strcpy(tsCharset, "UTF-8"); - //printf("can't get locale and charset from system, set it to UTF-8"); - } -} void taosKillSystem() { //printf("function taosKillSystem, exit!"); @@ -386,9 +264,6 @@ void taosGetSystemInfo() { long page_size = sysconf(_SC_PAGESIZE); tsTotalMemoryMB = physical_pages * page_size / (1024 * 1024); tsPageSize = page_size; - - taosGetSystemTimezone(); - taosGetSystemLocale(); } bool taosReadProcIO(int64_t *rchars, int64_t *wchars) { @@ -441,7 +316,7 @@ void taosSetCoreDump() {} int32_t taosGetDiskSize(char *dataDir, SDiskSize *diskSize) { struct statvfs info; if (statvfs(dataDir, &info)) { - //printf("failed to get disk size, dataDir:%s errno:%s", tsDataDir, strerror(errno)); + //printf("failed to get disk size, dataDir:%s errno:%s", osDataDir(), strerror(errno)); terrno = TAOS_SYSTEM_ERROR(errno); return -1; } else { @@ -625,110 +500,6 @@ static bool taosGetProcCpuInfo(ProcCpuInfo *cpuInfo) { return true; } -static void taosGetSystemTimezone() { - /* - * NOTE: do not remove it. - * Enforce set the correct daylight saving time(DST) flag according - * to current time - */ - time_t tx1 = time(NULL); - struct tm tm1; - localtime_r(&tx1, &tm1); - - /* load time zone string from /etc/timezone */ - FILE *f = fopen("/etc/timezone", "r"); - char buf[68] = {0}; - if (f != NULL) { - int len = fread(buf, 64, 1, f); - if (len < 64 && ferror(f)) { - fclose(f); - //printf("read /etc/timezone error, reason:%s", strerror(errno)); - return; - } - - fclose(f); - - buf[sizeof(buf) - 1] = 0; - char *lineEnd = strstr(buf, "\n"); - if (lineEnd != NULL) { - *lineEnd = 0; - } - - // for CentOS system, /etc/timezone does not exist. Ignore the TZ environment variables - if (strlen(buf) > 0) { - setenv("TZ", buf, 1); - } - } - // get and set default timezone - tzset(); - - /* - * get CURRENT time zone. - * system current time zone is affected by daylight saving time(DST) - * - * e.g., the local time zone of London in DST is GMT+01:00, - * otherwise is GMT+00:00 - */ - int32_t tz = (-timezone * MILLISECOND_PER_SECOND) / MILLISECOND_PER_HOUR; - tz += daylight; - - /* - * format example: - * - * Asia/Shanghai (CST, +0800) - * Europe/London (BST, +0100) - */ - snprintf(tsTimezone, TSDB_TIMEZONE_LEN, "%s (%s, %s%02d00)", buf, tzname[daylight], tz >= 0 ? "+" : "-", abs(tz)); - - // cfg_timezone->cfgStatus = TAOS_CFG_CSTATUS_DEFAULT; - //printf("timezone not configured, set to system default:%s", tsTimezone); -} - -/* - * POSIX format locale string: - * (Language Strings)_(Country/Region Strings).(code_page) - * - * example: en_US.UTF-8, zh_CN.GB18030, zh_CN.UTF-8, - * - * if user does not specify the locale in taos.cfg the program use default LC_CTYPE as system locale. - * - * In case of some CentOS systems, their default locale is "en_US.utf8", which is not valid code_page - * for libiconv that is employed to convert string in this system. This program will automatically use - * UTF-8 instead as the charset. - * - * In case of windows client, the locale string is not valid POSIX format, user needs to set the - * correct code_page for libiconv. Usually, the code_page of windows system with simple chinese is - * CP936, CP437 for English charset. - * - */ -static void taosGetSystemLocale() { // get and set default locale - char sep = '.'; - char *locale = NULL; - - locale = setlocale(LC_CTYPE, ""); - if (locale == NULL) { - //printf("can't get locale from system, set it to en_US.UTF-8 since error:%d:%s", errno, strerror(errno)); - strcpy(tsLocale, "en_US.UTF-8"); - } else { - tstrncpy(tsLocale, locale, TSDB_LOCALE_LEN); - //printf("locale not configured, set to system default:%s", tsLocale); - } - - // if user does not specify the charset, extract it from locale - char *str = strrchr(tsLocale, sep); - if (str != NULL) { - str++; - - char *revisedCharset = taosCharsetReplace(str); - tstrncpy(tsCharset, revisedCharset, TSDB_LOCALE_LEN); - - free(revisedCharset); - //printf("charset not configured, set to system default:%s", tsCharset); - } else { - strcpy(tsCharset, "UTF-8"); - //printf("can't get locale and charset from system, set it to UTF-8"); - } -} int32_t taosGetCpuCores() { return (int32_t)sysconf(_SC_NPROCESSORS_ONLN); } @@ -957,8 +728,6 @@ void taosGetSystemInfo() { taosGetCpuUsage(&tmp1, &tmp2); taosGetProcIO(&tmp1, &tmp2); - taosGetSystemTimezone(); - taosGetSystemLocale(); } void taosKillSystem() { diff --git a/source/os/src/osTimeZone.c b/source/os/src/osTimeZone.c deleted file mode 100644 index da40e14389ef4173ef8ac0afca235a3feeecafef..0000000000000000000000000000000000000000 --- a/source/os/src/osTimeZone.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2019 TAOS Data, Inc. - * - * This program is free software: you can use, redistribute, and/or modify - * it under the terms of the GNU Affero General Public License, version 3 - * or later ("AGPL"), as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -#define _DEFAULT_SOURCE -#include "os.h" -// #include "ulog.h" -// #include "tglobal.h" -// #include "tutil.h" - -// TODO refactor to set the tz value through parameter -void tsSetTimeZone() { -#if 0 - SGlobalCfg *cfg_timezone = taosGetConfigOption("timezone"); - if (cfg_timezone != NULL) { - uInfo("timezone is set to %s by %s", tsTimezone, tsCfgStatusStr[cfg_timezone->cfgStatus]); - } - -#ifdef WINDOWS - char winStr[TSDB_LOCALE_LEN * 2]; - sprintf(winStr, "TZ=%s", tsTimezone); - putenv(winStr); -#else - setenv("TZ", tsTimezone, 1); -#endif - tzset(); - - /* - * get CURRENT time zone. - * system current time zone is affected by daylight saving time(DST) - * - * e.g., the local time zone of London in DST is GMT+01:00, - * otherwise is GMT+00:00 - */ -#ifdef _MSC_VER -#if _MSC_VER >= 1900 - // see https://docs.microsoft.com/en-us/cpp/c-runtime-library/daylight-dstbias-timezone-and-tzname?view=vs-2019 - int64_t timezone = _timezone; - int32_t daylight = _daylight; - char **tzname = _tzname; -#endif -#endif - - int32_t tz = (int32_t)((-timezone * MILLISECOND_PER_SECOND) / MILLISECOND_PER_HOUR); - tz += daylight; - - /* - * format: - * (CST, +0800) - * (BST, +0100) - */ - sprintf(tsTimezone, "(%s, %s%02d00)", tzname[daylight], tz >= 0 ? "+" : "-", abs(tz)); - tsDaylight = daylight; - - uInfo("timezone format changed to %s", tsTimezone); - -#endif -} diff --git a/source/os/src/osTimezone.c b/source/os/src/osTimezone.c new file mode 100644 index 0000000000000000000000000000000000000000..a0ea01596fe5c811582073ec0809f66855d54f6e --- /dev/null +++ b/source/os/src/osTimezone.c @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#define _DEFAULT_SOURCE +#include "os.h" + +#if defined(_TD_WINDOWS_64) || defined(_TD_WINDOWS_32) +#if (_WIN64) +#include +#include +#include +#include +#include +#include +#pragma comment(lib, "Mswsock.lib ") +#endif +#include +#pragma warning(push) +#pragma warning(disable : 4091) +#include +#pragma warning(pop) +#elif defined(_TD_DARWIN_64) +#include +#include +#else +#include +#include +#include +#include +#include +#include +#include +#include +#endif + +void taosSetSystemTimezone(const char *inTimezone, char *outTimezone, int8_t *outDaylight) { +#ifdef WINDOWS + char winStr[TD_LOCALE_LEN * 2]; + sprintf(winStr, "TZ=%s", inTimezone); + putenv(winStr); +#else + setenv("TZ", inTimezone, 1); +#endif + tzset(); + + /* + * get CURRENT time zone. + * system current time zone is affected by daylight saving time(DST) + * + * e.g., the local time zone of London in DST is GMT+01:00, + * otherwise is GMT+00:00 + */ +#ifdef _MSC_VER +#if _MSC_VER >= 1900 + // see https://docs.microsoft.com/en-us/cpp/c-runtime-library/daylight-dstbias-timezone-and-tzname?view=vs-2019 + int64_t timezone = _timezone; + int32_t daylight = _daylight; + char **tzname = _tzname; +#endif +#endif + + int32_t tz = (int32_t)((-timezone * MILLISECOND_PER_SECOND) / MILLISECOND_PER_HOUR); + tz += daylight; + + /* + * format: + * (CST, +0800) + * (BST, +0100) + */ + + sprintf(outTimezone, "(%s, %s%02d00)", tzname[daylight], tz >= 0 ? "+" : "-", abs(tz)); + *outDaylight = daylight; +} + +void taosGetSystemTimezone(char *outTimezone) { +#if defined(_TD_WINDOWS_64) || defined(_TD_WINDOWS_32) + char *tz = getenv("TZ"); + if (tz == NULL || strlen(tz) == 0) { + strcpy(outTimezone, "not configured"); + } else { + strcpy(outTimezone, tz); + } + +#elif defined(_TD_DARWIN_64) + char buf[4096] = {0}; + char *tz = NULL; + { + int n = readlink("/etc/localtime", buf, sizeof(buf)); + if (n < 0) { + printf("read /etc/localtime error, reason:%s", strerror(errno)); + return; + } + buf[n] = '\0'; + for (int i = n - 1; i >= 0; --i) { + if (buf[i] == '/') { + if (tz) { + tz = buf + i + 1; + break; + } + tz = buf + i + 1; + } + } + if (!tz || 0 == strchr(tz, '/')) { + printf("parsing /etc/localtime failed"); + return; + } + + setenv("TZ", tz, 1); + tzset(); + } + + /* + * NOTE: do not remove it. + * Enforce set the correct daylight saving time(DST) flag according + * to current time + */ + time_t tx1 = time(NULL); + struct tm tm1; + localtime_r(&tx1, &tm1); + + /* + * format example: + * + * Asia/Shanghai (CST, +0800) + * Europe/London (BST, +0100) + */ + snprintf(outTimezone, TD_TIMEZONE_LEN, "%s (%s, %+03ld00)", tz, tm1.tm_isdst ? tzname[daylight] : tzname[0], + -timezone / 3600); + +#else + /* + * NOTE: do not remove it. + * Enforce set the correct daylight saving time(DST) flag according + * to current time + */ + time_t tx1 = time(NULL); + struct tm tm1; + localtime_r(&tx1, &tm1); + + /* load time zone string from /etc/timezone */ + FILE *f = fopen("/etc/timezone", "r"); + char buf[68] = {0}; + if (f != NULL) { + int len = fread(buf, 64, 1, f); + if (len < 64 && ferror(f)) { + fclose(f); + // printf("read /etc/timezone error, reason:%s", strerror(errno)); + return; + } + + fclose(f); + + buf[sizeof(buf) - 1] = 0; + char *lineEnd = strstr(buf, "\n"); + if (lineEnd != NULL) { + *lineEnd = 0; + } + + // for CentOS system, /etc/timezone does not exist. Ignore the TZ environment variables + if (strlen(buf) > 0) { + setenv("TZ", buf, 1); + } + } + // get and set default timezone + tzset(); + + /* + * get CURRENT time zone. + * system current time zone is affected by daylight saving time(DST) + * + * e.g., the local time zone of London in DST is GMT+01:00, + * otherwise is GMT+00:00 + */ + int32_t tz = (-timezone * MILLISECOND_PER_SECOND) / MILLISECOND_PER_HOUR; + tz += daylight; + + /* + * format example: + * + * Asia/Shanghai (CST, +0800) + * Europe/London (BST, +0100) + */ + snprintf(outTimezone, TD_TIMEZONE_LEN, "%s (%s, %s%02d00)", buf, tzname[daylight], tz >= 0 ? "+" : "-", abs(tz)); + +#endif +} diff --git a/source/util/src/tlog.c b/source/util/src/tlog.c index f479203fcef88249d2e88655610fda1bd43307aa..ed55ef91b033442d667b9cea938e3abc6f504044 100644 --- a/source/util/src/tlog.c +++ b/source/util/src/tlog.c @@ -118,10 +118,10 @@ static int32_t taosStartLog() { int32_t taosInitLog(const char *logName, int maxFiles) { if (tsLogInited) return 0; - taosUpdateLogSpace(); + osUpdate(); char fullName[PATH_MAX] = {0}; - snprintf(fullName, PATH_MAX, "%s" TD_DIRSEP "%s", tsLogDir, logName); + snprintf(fullName, PATH_MAX, "%s" TD_DIRSEP "%s", osLogDir(), logName); tsLogObj.logHandle = taosLogBuffNew(TSDB_DEFAULT_LOG_BUF_SIZE); if (tsLogObj.logHandle == NULL) return -1; @@ -187,7 +187,7 @@ static void taosKeepOldLog(char *oldName) { } } - taosRemoveOldFiles(tsLogDir, TABS(tsLogKeepDays)); + taosRemoveOldFiles(osLogDir(), TABS(tsLogKeepDays)); } static void *taosThreadToOpenNewFile(void *param) { @@ -380,7 +380,7 @@ static int32_t taosOpenLogFile(char *fn, int32_t maxLines, int32_t maxFileNum) { } void taosPrintLog(const char *flags, int32_t dflag, const char *format, ...) { - if (!taosLogSpaceAvailable()) return; + if (!osLogSpaceAvailable()) return; va_list argpointer; char buffer[MAX_LOGLINE_BUFFER_SIZE] = {0}; @@ -434,7 +434,7 @@ void taosPrintLog(const char *flags, int32_t dflag, const char *format, ...) { } void taosDumpData(unsigned char *msg, int32_t len) { - if (!taosLogSpaceAvailable()) return; + if (!osLogSpaceAvailable()) return; char temp[256]; int32_t i, pos = 0, c = 0; @@ -457,7 +457,7 @@ void taosDumpData(unsigned char *msg, int32_t len) { } void taosPrintLongString(const char *flags, int32_t dflag, const char *format, ...) { - if (!taosLogSpaceAvailable()) return; + if (!osLogSpaceAvailable()) return; va_list argpointer; char buffer[MAX_LOGLINE_DUMP_BUFFER_SIZE]; diff --git a/tools/shell/src/shellEngine.c b/tools/shell/src/shellEngine.c index 4186f0dae1038f2336565a99b03953b0e99a1e8d..33774bdd058b516189d7c0552c08622e10ac8a8d 100644 --- a/tools/shell/src/shellEngine.c +++ b/tools/shell/src/shellEngine.c @@ -68,11 +68,11 @@ TAOS *shellInit(SShellArguments *_args) { printf("\n"); if (!_args->is_use_passwd) { #ifdef TD_WINDOWS - strcpy(tsOsName, "Windows"); + strcpy(osName(), "Windows"); #elif defined(TD_DARWIN) - strcpy(tsOsName, "Darwin"); + strcpy(osName(), "Darwin"); #endif - printf(CLIENT_VERSION, tsOsName, taos_get_client_info()); + printf(CLIENT_VERSION, osName(), taos_get_client_info()); } fflush(stdout); diff --git a/tools/shell/src/shellLinux.c b/tools/shell/src/shellLinux.c index 89b477f08a447c99d36707785ad17569df670e24..caba986ce7f5326a3ec15ebc64220cd50dc67581 100644 --- a/tools/shell/src/shellLinux.c +++ b/tools/shell/src/shellLinux.c @@ -184,8 +184,7 @@ static void parse_args( for (int i = 1; i < argc; i++) { if ((strncmp(argv[i], "-p", 2) == 0) || (strncmp(argv[i], "--password", 10) == 0)) { - strcpy(tsOsName, "Linux"); - printf(LINUXCLIENT_VERSION, tsOsName, taos_get_client_info()); + printf(LINUXCLIENT_VERSION, osName(), taos_get_client_info()); if ((strlen(argv[i]) == 2) || (strncmp(argv[i], "--password", 10) == 0)) { printf("Enter password: ");