Replace unsafe memory functions with safe versions
This commit is contained in:
parent
0f3d290c27
commit
215208a985
|
@ -25,7 +25,7 @@ typedef int32_t TdUcs4;
|
|||
#if !defined(DISALLOW_NCHAR_WITHOUT_ICONV) && defined(DARWIN)
|
||||
#include "iconv.h"
|
||||
#else
|
||||
typedef void *iconv_t;
|
||||
typedef void *iconv_t;
|
||||
#endif
|
||||
typedef enum { M2C = 0, C2M } ConvType;
|
||||
|
||||
|
@ -55,29 +55,34 @@ typedef enum { M2C = 0, C2M } ConvType;
|
|||
#ifdef strndup
|
||||
#undef strndup
|
||||
#endif
|
||||
#define strndup STR_TO_F_FUNC_TAOS_FORBID
|
||||
#define strndup STR_TO_F_FUNC_TAOS_FORBID
|
||||
|
||||
#endif
|
||||
|
||||
#define tstrncpy(dst, src, size) \
|
||||
do { \
|
||||
(void)strncpy((dst), (src), (size)); \
|
||||
(dst)[(size) - 1] = 0; \
|
||||
(dst)[(size)-1] = 0; \
|
||||
} while (0)
|
||||
|
||||
int64_t tsnprintf(char *dst, int64_t size, const char *format, ...);
|
||||
#define TAOS_STRCPY(_dst, _src) ((void)strcpy(_dst, _src))
|
||||
#define TAOS_STRCPY(_dst, _src) ((void)strcpy(_dst, _src))
|
||||
#define TAOS_STRNCPY(_dst, _src, _size) ((void)strncpy(_dst, _src, _size))
|
||||
#define TAOS_STRCAT(_dst, _src) ((void)strcat(_dst, _src))
|
||||
#define TAOS_STRNCAT(_dst, _src, len) ((void)strncat(_dst, _src, len))
|
||||
#define TAOS_STRCAT(_dst, _src) ((void)strcat(_dst, _src))
|
||||
#define TAOS_STRNCAT(_dst, _src, len) ((void)strncat(_dst, _src, len))
|
||||
|
||||
char *tstrdup(const char *src);
|
||||
int32_t taosUcs4len(TdUcs4 *ucs4);
|
||||
int32_t taosStr2int64(const char *str, int64_t *val);
|
||||
int32_t taosStr2int16(const char *str, int16_t *val);
|
||||
int32_t taosStr2int32(const char *str, int32_t *val);
|
||||
int32_t taosStr2int16(const char *str, int16_t *val);
|
||||
int32_t taosStr2int8(const char *str, int8_t *val);
|
||||
|
||||
int32_t taosStr2Uint64(const char *str, uint64_t *val);
|
||||
int32_t taosStr2Uint32(const char *str, uint32_t *val);
|
||||
int32_t taosStr2Uint16(const char *str, uint16_t *val);
|
||||
int32_t taosStr2Uint8(const char *str, uint8_t *val);
|
||||
|
||||
int32_t taosConvInit(void);
|
||||
void taosConvDestroy();
|
||||
iconv_t taosAcquireConv(int32_t *idx, ConvType type);
|
||||
|
@ -112,9 +117,9 @@ float taosStr2Float(const char *str, char **pEnd);
|
|||
int32_t taosHex2Ascii(const char *z, uint32_t n, void **data, uint32_t *size);
|
||||
int32_t taosAscii2Hex(const char *z, uint32_t n, void **data, uint32_t *size);
|
||||
char *taosStrndup(const char *s, int n);
|
||||
//int32_t taosBin2Ascii(const char *z, uint32_t n, void** data, uint32_t* size);
|
||||
bool isHex(const char* z, uint32_t n);
|
||||
bool isValidateHex(const char* z, uint32_t n);
|
||||
// int32_t taosBin2Ascii(const char *z, uint32_t n, void** data, uint32_t* size);
|
||||
bool isHex(const char *z, uint32_t n);
|
||||
bool isValidateHex(const char *z, uint32_t n);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -300,7 +300,13 @@ void* doConsumeData(void* param) {
|
|||
int main(int argc, char** argv) {
|
||||
testing::InitGoogleTest(&argc, argv);
|
||||
if (argc > 1) {
|
||||
numOfThreads = atoi(argv[1]);
|
||||
//numOfThreads = atoi(argv[1]);
|
||||
int32_t code = taosStr2int32(argv[1], &numOfThreads);
|
||||
if (code != 0) {
|
||||
return code;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
numOfThreads = TMAX(numOfThreads, 1);
|
||||
|
|
|
@ -27,7 +27,10 @@ int32_t taosGetFqdnPortFromEp(const char* ep, SEp* pEp) {
|
|||
char* temp = strchr(pEp->fqdn, ':');
|
||||
if (temp) {
|
||||
*temp = 0;
|
||||
pEp->port = atoi(temp + 1);
|
||||
pEp->port = taosStr2UInt16(temp + 1, NULL, 10);
|
||||
if (pEp->port < 0) {
|
||||
return TSDB_CODE_INVALID_PARA;
|
||||
}
|
||||
}
|
||||
|
||||
if (pEp->port == 0) {
|
||||
|
@ -282,7 +285,7 @@ int32_t dumpConfToDataBlock(SSDataBlock* pBlock, int32_t startCol) {
|
|||
locked = 1;
|
||||
|
||||
while ((pItem = cfgNextIter(pIter)) != NULL) {
|
||||
_start:
|
||||
_start:
|
||||
col = startCol;
|
||||
|
||||
// GRANT_CFG_SKIP;
|
||||
|
@ -297,11 +300,11 @@ _start:
|
|||
|
||||
TAOS_CHECK_GOTO(colDataSetVal(pColInfo, numOfRows, name, false), NULL, _exit);
|
||||
|
||||
char value[TSDB_CONFIG_PATH_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||
int32_t valueLen = 0;
|
||||
char value[TSDB_CONFIG_PATH_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||
int32_t valueLen = 0;
|
||||
SDiskCfg* pDiskCfg = NULL;
|
||||
if (strcasecmp(pItem->name, "dataDir") == 0 && exSize > 0) {
|
||||
char* buf = &value[VARSTR_HEADER_SIZE];
|
||||
char* buf = &value[VARSTR_HEADER_SIZE];
|
||||
pDiskCfg = taosArrayGet(pItem->array, index);
|
||||
valueLen = tsnprintf(buf, TSDB_CONFIG_PATH_LEN, "%s", pDiskCfg->dir);
|
||||
index++;
|
||||
|
@ -334,7 +337,7 @@ _start:
|
|||
if (strcasecmp(pItem->name, "dataDir") == 0 && pDiskCfg) {
|
||||
char* buf = &info[VARSTR_HEADER_SIZE];
|
||||
valueLen = tsnprintf(buf, TSDB_CONFIG_INFO_LEN, "level %d primary %d disabled %" PRIi8, pDiskCfg->level,
|
||||
pDiskCfg->primary, pDiskCfg->disable);
|
||||
pDiskCfg->primary, pDiskCfg->disable);
|
||||
} else {
|
||||
valueLen = 0;
|
||||
}
|
||||
|
@ -351,7 +354,7 @@ _start:
|
|||
if (index > 0 && index <= exSize) {
|
||||
goto _start;
|
||||
}
|
||||
}
|
||||
}
|
||||
pBlock->info.rows = numOfRows;
|
||||
_exit:
|
||||
if (locked) cfgUnLock(pConf);
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#define _DEFAULT_SOURCE
|
||||
#include "mndDb.h"
|
||||
#include "audit.h"
|
||||
#include "command.h"
|
||||
#include "mndArbGroup.h"
|
||||
#include "mndCluster.h"
|
||||
#include "mndDnode.h"
|
||||
|
@ -34,7 +35,6 @@
|
|||
#include "systable.h"
|
||||
#include "thttp.h"
|
||||
#include "tjson.h"
|
||||
#include "command.h"
|
||||
|
||||
#define DB_VER_NUMBER 1
|
||||
#define DB_RESERVE_SIZE 27
|
||||
|
@ -416,7 +416,12 @@ static int32_t mndCheckDbName(const char *dbName, SUserObj *pUser) {
|
|||
return TSDB_CODE_MND_INVALID_DB;
|
||||
}
|
||||
|
||||
int32_t acctId = atoi(dbName);
|
||||
int32_t acctId;
|
||||
int32_t code = taosStr2int32(dbName, &acctId);
|
||||
if (code != 0) {
|
||||
return code;
|
||||
}
|
||||
|
||||
if (acctId != pUser->acctId) {
|
||||
return TSDB_CODE_MND_INVALID_DB_ACCT;
|
||||
}
|
||||
|
@ -1560,8 +1565,8 @@ static int32_t mndBuildDropVgroupAction(SMnode *pMnode, STrans *pTrans, SDbObj *
|
|||
|
||||
static int32_t mndSetDropDbRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj *pDb) {
|
||||
int32_t code = 0;
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
void *pIter = NULL;
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
void *pIter = NULL;
|
||||
|
||||
while (1) {
|
||||
SVgObj *pVgroup = NULL;
|
||||
|
@ -1941,9 +1946,9 @@ int32_t mndValidateDbInfo(SMnode *pMnode, SDbCacheInfo *pDbs, int32_t numOfDbs,
|
|||
continue;
|
||||
} else {
|
||||
mTrace("db:%s, valid dbinfo, vgVersion:%d cfgVersion:%d stateTs:%" PRId64
|
||||
" numOfTables:%d, changed to vgVersion:%d cfgVersion:%d stateTs:%" PRId64 " numOfTables:%d",
|
||||
pDbCacheInfo->dbFName, pDbCacheInfo->vgVersion, pDbCacheInfo->cfgVersion, pDbCacheInfo->stateTs,
|
||||
pDbCacheInfo->numOfTable, pDb->vgVersion, pDb->cfgVersion, pDb->stateTs, numOfTable);
|
||||
" numOfTables:%d, changed to vgVersion:%d cfgVersion:%d stateTs:%" PRId64 " numOfTables:%d",
|
||||
pDbCacheInfo->dbFName, pDbCacheInfo->vgVersion, pDbCacheInfo->cfgVersion, pDbCacheInfo->stateTs,
|
||||
pDbCacheInfo->numOfTable, pDb->vgVersion, pDb->cfgVersion, pDb->stateTs, numOfTable);
|
||||
}
|
||||
|
||||
if (pDbCacheInfo->cfgVersion < pDb->cfgVersion) {
|
||||
|
@ -1955,7 +1960,7 @@ int32_t mndValidateDbInfo(SMnode *pMnode, SDbCacheInfo *pDbs, int32_t numOfDbs,
|
|||
rsp.pTsmaRsp = taosMemoryCalloc(1, sizeof(STableTSMAInfoRsp));
|
||||
if (rsp.pTsmaRsp) rsp.pTsmaRsp->pTsmas = taosArrayInit(4, POINTER_BYTES);
|
||||
if (rsp.pTsmaRsp && rsp.pTsmaRsp->pTsmas) {
|
||||
bool exist = false;
|
||||
bool exist = false;
|
||||
int32_t code = mndGetDbTsmas(pMnode, 0, pDb->uid, rsp.pTsmaRsp, &exist);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
mndReleaseDb(pMnode, pDb);
|
||||
|
@ -2386,7 +2391,8 @@ static void mndDumpDbInfoData(SMnode *pMnode, SSDataBlock *pBlock, SDbObj *pDb,
|
|||
TAOS_CHECK_GOTO(colDataSetVal(pColInfo, rows, (const char *)strictVstr, false), &lino, _OVER);
|
||||
|
||||
char durationVstr[128] = {0};
|
||||
int32_t len = formatDurationOrKeep(&durationVstr[VARSTR_HEADER_SIZE], sizeof(durationVstr) - VARSTR_HEADER_SIZE, pDb->cfg.daysPerFile);
|
||||
int32_t len = formatDurationOrKeep(&durationVstr[VARSTR_HEADER_SIZE], sizeof(durationVstr) - VARSTR_HEADER_SIZE,
|
||||
pDb->cfg.daysPerFile);
|
||||
|
||||
varDataSetLen(durationVstr, len);
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
|
@ -2402,9 +2408,9 @@ static void mndDumpDbInfoData(SMnode *pMnode, SSDataBlock *pBlock, SDbObj *pDb,
|
|||
int32_t lenKeep2 = formatDurationOrKeep(keep2Str, sizeof(keep2Str), pDb->cfg.daysToKeep2);
|
||||
|
||||
if (pDb->cfg.daysToKeep0 > pDb->cfg.daysToKeep1 || pDb->cfg.daysToKeep0 > pDb->cfg.daysToKeep2) {
|
||||
len = sprintf(&keepVstr[VARSTR_HEADER_SIZE], "%s,%s,%s", keep1Str, keep2Str, keep0Str);
|
||||
len = sprintf(&keepVstr[VARSTR_HEADER_SIZE], "%s,%s,%s", keep1Str, keep2Str, keep0Str);
|
||||
} else {
|
||||
len = sprintf(&keepVstr[VARSTR_HEADER_SIZE], "%s,%s,%s", keep0Str, keep1Str, keep2Str);
|
||||
len = sprintf(&keepVstr[VARSTR_HEADER_SIZE], "%s,%s,%s", keep0Str, keep1Str, keep2Str);
|
||||
}
|
||||
varDataSetLen(keepVstr, len);
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
|
|
|
@ -462,7 +462,7 @@ int32_t mndGetDnodeData(SMnode *pMnode, SArray *pDnodeInfo) {
|
|||
dInfo.isMnode = 0;
|
||||
}
|
||||
|
||||
if(taosArrayPush(pDnodeInfo, &dInfo) == NULL){
|
||||
if (taosArrayPush(pDnodeInfo, &dInfo) == NULL) {
|
||||
code = terrno;
|
||||
sdbCancelFetch(pSdb, pIter);
|
||||
break;
|
||||
|
@ -471,12 +471,12 @@ int32_t mndGetDnodeData(SMnode *pMnode, SArray *pDnodeInfo) {
|
|||
TAOS_RETURN(code);
|
||||
}
|
||||
|
||||
#define CHECK_MONITOR_PARA(para,err) \
|
||||
if (pCfg->monitorParas.para != para) { \
|
||||
mError("dnode:%d, para:%d inconsistent with cluster:%d", pDnode->id, pCfg->monitorParas.para, para); \
|
||||
terrno = err; \
|
||||
return err;\
|
||||
}
|
||||
#define CHECK_MONITOR_PARA(para, err) \
|
||||
if (pCfg->monitorParas.para != para) { \
|
||||
mError("dnode:%d, para:%d inconsistent with cluster:%d", pDnode->id, pCfg->monitorParas.para, para); \
|
||||
terrno = err; \
|
||||
return err; \
|
||||
}
|
||||
|
||||
static int32_t mndCheckClusterCfgPara(SMnode *pMnode, SDnodeObj *pDnode, const SClusterCfg *pCfg) {
|
||||
CHECK_MONITOR_PARA(tsEnableMonitor, DND_REASON_STATUS_MONITOR_SWITCH_NOT_MATCH);
|
||||
|
@ -487,7 +487,8 @@ static int32_t mndCheckClusterCfgPara(SMnode *pMnode, SDnodeObj *pDnode, const S
|
|||
CHECK_MONITOR_PARA(tsSlowLogScope, DND_REASON_STATUS_MONITOR_SLOW_LOG_SCOPE_NOT_MATCH);
|
||||
|
||||
if (0 != strcasecmp(pCfg->monitorParas.tsSlowLogExceptDb, tsSlowLogExceptDb)) {
|
||||
mError("dnode:%d, tsSlowLogExceptDb:%s inconsistent with cluster:%s", pDnode->id, pCfg->monitorParas.tsSlowLogExceptDb, tsSlowLogExceptDb);
|
||||
mError("dnode:%d, tsSlowLogExceptDb:%s inconsistent with cluster:%s", pDnode->id,
|
||||
pCfg->monitorParas.tsSlowLogExceptDb, tsSlowLogExceptDb);
|
||||
terrno = TSDB_CODE_DNODE_INVALID_MONITOR_PARAS;
|
||||
return DND_REASON_STATUS_MONITOR_NOT_MATCH;
|
||||
}
|
||||
|
@ -583,8 +584,8 @@ static bool mndUpdateMnodeState(SMnodeObj *pObj, SMnodeLoad *pMload) {
|
|||
return stateChanged;
|
||||
}
|
||||
|
||||
extern char* tsMonFwUri;
|
||||
extern char* tsMonSlowLogUri;
|
||||
extern char *tsMonFwUri;
|
||||
extern char *tsMonSlowLogUri;
|
||||
static int32_t mndProcessStatisReq(SRpcMsg *pReq) {
|
||||
SMnode *pMnode = pReq->info.node;
|
||||
SStatisReq statisReq = {0};
|
||||
|
@ -596,9 +597,9 @@ static int32_t mndProcessStatisReq(SRpcMsg *pReq) {
|
|||
mInfo("process statis req,\n %s", statisReq.pCont);
|
||||
}
|
||||
|
||||
if (statisReq.type == MONITOR_TYPE_COUNTER){
|
||||
if (statisReq.type == MONITOR_TYPE_COUNTER) {
|
||||
monSendContent(statisReq.pCont, tsMonFwUri);
|
||||
}else if(statisReq.type == MONITOR_TYPE_SLOW_LOG){
|
||||
} else if (statisReq.type == MONITOR_TYPE_SLOW_LOG) {
|
||||
monSendContent(statisReq.pCont, tsMonSlowLogUri);
|
||||
}
|
||||
|
||||
|
@ -1058,27 +1059,27 @@ _OVER:
|
|||
TAOS_RETURN(code);
|
||||
}
|
||||
|
||||
static void getSlowLogScopeString(int32_t scope, char* result){
|
||||
if(scope == SLOW_LOG_TYPE_NULL) {
|
||||
static void getSlowLogScopeString(int32_t scope, char *result) {
|
||||
if (scope == SLOW_LOG_TYPE_NULL) {
|
||||
(void)strcat(result, "NONE");
|
||||
return;
|
||||
}
|
||||
while(scope > 0){
|
||||
if(scope & SLOW_LOG_TYPE_QUERY) {
|
||||
while (scope > 0) {
|
||||
if (scope & SLOW_LOG_TYPE_QUERY) {
|
||||
(void)strcat(result, "QUERY");
|
||||
scope &= ~SLOW_LOG_TYPE_QUERY;
|
||||
} else if(scope & SLOW_LOG_TYPE_INSERT) {
|
||||
} else if (scope & SLOW_LOG_TYPE_INSERT) {
|
||||
(void)strcat(result, "INSERT");
|
||||
scope &= ~SLOW_LOG_TYPE_INSERT;
|
||||
} else if(scope & SLOW_LOG_TYPE_OTHERS) {
|
||||
} else if (scope & SLOW_LOG_TYPE_OTHERS) {
|
||||
(void)strcat(result, "OTHERS");
|
||||
scope &= ~SLOW_LOG_TYPE_OTHERS;
|
||||
} else{
|
||||
} else {
|
||||
(void)printf("invalid slow log scope:%d", scope);
|
||||
return;
|
||||
}
|
||||
|
||||
if(scope > 0) {
|
||||
if (scope > 0) {
|
||||
(void)strcat(result, "|");
|
||||
}
|
||||
}
|
||||
|
@ -1440,7 +1441,7 @@ _OVER:
|
|||
|
||||
static int32_t mndMCfg2DCfg(SMCfgDnodeReq *pMCfgReq, SDCfgDnodeReq *pDCfgReq) {
|
||||
int32_t code = 0;
|
||||
char *p = pMCfgReq->config;
|
||||
char *p = pMCfgReq->config;
|
||||
while (*p) {
|
||||
if (*p == ' ') {
|
||||
break;
|
||||
|
@ -1538,7 +1539,7 @@ static int32_t mndProcessConfigDnodeReq(SRpcMsg *pReq) {
|
|||
snprintf(dcfgReq.value, TSDB_DNODE_VALUE_LEN, "%d", flag);
|
||||
#endif
|
||||
} else {
|
||||
TAOS_CHECK_GOTO (mndMCfg2DCfg(&cfgReq, &dcfgReq), NULL, _err_out);
|
||||
TAOS_CHECK_GOTO(mndMCfg2DCfg(&cfgReq, &dcfgReq), NULL, _err_out);
|
||||
if (strlen(dcfgReq.config) > TSDB_DNODE_CONFIG_LEN) {
|
||||
mError("dnode:%d, failed to config since config is too long", cfgReq.dnodeId);
|
||||
code = TSDB_CODE_INVALID_CFG;
|
||||
|
@ -1881,11 +1882,19 @@ static int32_t mndMCfgGetValInt32(SMCfgDnodeReq *pMCfgReq, int32_t optLen, int32
|
|||
if (' ' == pMCfgReq->config[optLen]) {
|
||||
// 'key value'
|
||||
if (strlen(pMCfgReq->value) != 0) goto _err;
|
||||
*pOutValue = atoi(pMCfgReq->config + optLen + 1);
|
||||
code = taosStr2int32(pMCfgReq->config + optLen + 1, pOutValue);
|
||||
if (code != 0) {
|
||||
mError("dnode:%d, failed to get cfg since code: %s", pMCfgReq->dnodeId, tstrerror(code));
|
||||
goto _err;
|
||||
}
|
||||
} else {
|
||||
// 'key' 'value'
|
||||
if (strlen(pMCfgReq->value) == 0) goto _err;
|
||||
*pOutValue = atoi(pMCfgReq->value);
|
||||
code = taosStr2int32(pMCfgReq->value, pOutValue);
|
||||
if (code != 0) {
|
||||
mError("dnode:%d, failed to get cfg since code: %s", pMCfgReq->dnodeId, tstrerror(code));
|
||||
goto _err;
|
||||
}
|
||||
}
|
||||
|
||||
TAOS_RETURN(code);
|
||||
|
|
|
@ -190,7 +190,14 @@ int32_t vnodeRenameVgroupId(const char *srcPath, const char *dstPath, int32_t sr
|
|||
char *tsdbFilePrefixPos = strstr(oldRname, tsdbFilePrefix);
|
||||
if (tsdbFilePrefixPos == NULL) continue;
|
||||
|
||||
int32_t tsdbFileVgId = atoi(tsdbFilePrefixPos + prefixLen);
|
||||
int32_t tsdbFileVgId = 0; // atoi(tsdbFilePrefixPos + prefixLen);
|
||||
ret = taosStr2int32(tsdbFilePrefixPos + prefixLen, &tsdbFileVgId);
|
||||
if (ret != 0) {
|
||||
vError("vgId:%d, failed to get tsdb file vgid since %s", dstVgId, tstrerror(ret));
|
||||
tfsClosedir(tsdbDir);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (tsdbFileVgId == srcVgId) {
|
||||
char *tsdbFileSurfixPos = tsdbFilePrefixPos + prefixLen + vnodeVgroupIdLen(srcVgId);
|
||||
|
||||
|
|
|
@ -2872,13 +2872,16 @@ static int32_t getIpV4RangeFromWhitelistItem(char* ipRange, SIpV4Range* pIpRange
|
|||
*slash = '\0';
|
||||
struct in_addr addr;
|
||||
if (uv_inet_pton(AF_INET, ipCopy, &addr) == 0) {
|
||||
int prefix = atoi(slash + 1);
|
||||
if (prefix < 0 || prefix > 32) {
|
||||
code = TSDB_CODE_PAR_INVALID_IP_RANGE;
|
||||
} else {
|
||||
pIpRange->ip = addr.s_addr;
|
||||
pIpRange->mask = prefix;
|
||||
code = TSDB_CODE_SUCCESS;
|
||||
int32_t prefix = 0;
|
||||
code = taosStr2int32(slash + 1, &prefix);
|
||||
if (code == 0) {
|
||||
if (prefix < 0 || prefix > 32) {
|
||||
code = TSDB_CODE_PAR_INVALID_IP_RANGE;
|
||||
} else {
|
||||
pIpRange->ip = addr.s_addr;
|
||||
pIpRange->mask = prefix;
|
||||
code = TSDB_CODE_SUCCESS;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
code = TSDB_CODE_PAR_INVALID_IP_RANGE;
|
||||
|
|
|
@ -132,6 +132,20 @@ int32_t taosStr2int64(const char *str, int64_t *val) {
|
|||
}
|
||||
}
|
||||
|
||||
int32_t taosStr2int32(const char *str, int32_t *val) {
|
||||
OS_PARAM_CHECK(str);
|
||||
OS_PARAM_CHECK(val);
|
||||
int64_t tmp = 0;
|
||||
int32_t code = taosStr2int64(str, &tmp);
|
||||
if (code) {
|
||||
return code;
|
||||
} else if (tmp > INT32_MAX || tmp < INT32_MIN) {
|
||||
return TAOS_SYSTEM_ERROR(ERANGE);
|
||||
} else {
|
||||
*val = (int32_t)tmp;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
int32_t taosStr2int16(const char *str, int16_t *val) {
|
||||
OS_PARAM_CHECK(str);
|
||||
OS_PARAM_CHECK(val);
|
||||
|
@ -147,21 +161,6 @@ int32_t taosStr2int16(const char *str, int16_t *val) {
|
|||
}
|
||||
}
|
||||
|
||||
int32_t taosStr2int32(const char *str, int32_t *val) {
|
||||
OS_PARAM_CHECK(str);
|
||||
OS_PARAM_CHECK(val);
|
||||
int64_t tmp = 0;
|
||||
int32_t code = taosStr2int64(str, &tmp);
|
||||
if (code) {
|
||||
return code;
|
||||
} else if (tmp > INT32_MAX || tmp < INT32_MIN) {
|
||||
return TAOS_SYSTEM_ERROR(ERANGE);
|
||||
} else {
|
||||
*val = (int32_t)tmp;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t taosStr2int8(const char *str, int8_t *val) {
|
||||
OS_PARAM_CHECK(str);
|
||||
OS_PARAM_CHECK(val);
|
||||
|
@ -177,6 +176,67 @@ int32_t taosStr2int8(const char *str, int8_t *val) {
|
|||
}
|
||||
}
|
||||
|
||||
int32_t taosStr2Uint64(const char *str, uint64_t *val) {
|
||||
if (str == NULL || val == NULL) {
|
||||
return TSDB_CODE_INVALID_PARA;
|
||||
}
|
||||
char *endptr = NULL;
|
||||
uint64_t ret = strtoull(str, &endptr, 10);
|
||||
if (errno == ERANGE && (ret == ULLONG_MAX)) {
|
||||
return TAOS_SYSTEM_ERROR(errno);
|
||||
} else if (errno == EINVAL && ret == 0) {
|
||||
return TSDB_CODE_INVALID_PARA;
|
||||
} else {
|
||||
*val = ret;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t taosStr2Uint32(const char *str, uint32_t *val) {
|
||||
OS_PARAM_CHECK(str);
|
||||
OS_PARAM_CHECK(val);
|
||||
uint64_t tmp = 0;
|
||||
int32_t code = taosStr2Uint64(str, &tmp);
|
||||
if (code) {
|
||||
return code;
|
||||
} else if (tmp > UINT32_MAX) {
|
||||
return TAOS_SYSTEM_ERROR(ERANGE);
|
||||
} else {
|
||||
*val = (int32_t)tmp;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t taosStr2Uint16(const char *str, uint16_t *val) {
|
||||
OS_PARAM_CHECK(str);
|
||||
OS_PARAM_CHECK(val);
|
||||
uint64_t tmp = 0;
|
||||
int32_t code = taosStr2Uint64(str, &tmp);
|
||||
if (code) {
|
||||
return code;
|
||||
} else if (tmp > UINT16_MAX) {
|
||||
return TAOS_SYSTEM_ERROR(ERANGE);
|
||||
} else {
|
||||
*val = (int16_t)tmp;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t taosStr2Uint8(const char *str, uint8_t *val) {
|
||||
OS_PARAM_CHECK(str);
|
||||
OS_PARAM_CHECK(val);
|
||||
uint64_t tmp = 0;
|
||||
int32_t code = taosStr2Uint64(str, &tmp);
|
||||
if (code) {
|
||||
return code;
|
||||
} else if (tmp > UINT8_MAX) {
|
||||
return TAOS_SYSTEM_ERROR(ERANGE);
|
||||
} else {
|
||||
*val = (int8_t)tmp;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t tasoUcs4Compare(TdUcs4 *f1_ucs4, TdUcs4 *f2_ucs4, int32_t bytes) {
|
||||
if ((f1_ucs4 == NULL || f2_ucs4 == NULL)) {
|
||||
return TSDB_CODE_INVALID_PARA;
|
||||
|
@ -289,7 +349,7 @@ void taosConvDestroy() {
|
|||
}
|
||||
|
||||
iconv_t taosAcquireConv(int32_t *idx, ConvType type) {
|
||||
if(idx == NULL) {
|
||||
if (idx == NULL) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return (iconv_t)-1;
|
||||
}
|
||||
|
@ -356,7 +416,7 @@ bool taosMbsToUcs4(const char *mbs, size_t mbsLength, TdUcs4 *ucs4, int32_t ucs4
|
|||
if (ucs4_max_len == 0) {
|
||||
return true;
|
||||
}
|
||||
if(ucs4_max_len < 0 || mbs == NULL || ucs4 == NULL) {
|
||||
if (ucs4_max_len < 0 || mbs == NULL || ucs4 == NULL) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return false;
|
||||
}
|
||||
|
@ -373,8 +433,8 @@ bool taosMbsToUcs4(const char *mbs, size_t mbsLength, TdUcs4 *ucs4, int32_t ucs4
|
|||
return false;
|
||||
}
|
||||
|
||||
size_t ucs4_input_len = mbsLength;
|
||||
size_t outLeft = ucs4_max_len;
|
||||
size_t ucs4_input_len = mbsLength;
|
||||
size_t outLeft = ucs4_max_len;
|
||||
if (iconv(conv, (char **)&mbs, &ucs4_input_len, (char **)&ucs4, &outLeft) == -1) {
|
||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||
taosReleaseConv(idx, conv, M2C);
|
||||
|
@ -401,7 +461,7 @@ int32_t taosUcs4ToMbs(TdUcs4 *ucs4, int32_t ucs4_max_len, char *mbs) {
|
|||
if (ucs4_max_len == 0) {
|
||||
return 0;
|
||||
}
|
||||
if(ucs4_max_len < 0 || ucs4 == NULL || mbs == NULL) {
|
||||
if (ucs4_max_len < 0 || ucs4 == NULL || mbs == NULL) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return terrno;
|
||||
}
|
||||
|
@ -418,8 +478,8 @@ int32_t taosUcs4ToMbs(TdUcs4 *ucs4, int32_t ucs4_max_len, char *mbs) {
|
|||
return terrno;
|
||||
}
|
||||
|
||||
size_t ucs4_input_len = ucs4_max_len;
|
||||
size_t outLen = ucs4_max_len;
|
||||
size_t ucs4_input_len = ucs4_max_len;
|
||||
size_t outLen = ucs4_max_len;
|
||||
if (iconv(conv, (char **)&ucs4, &ucs4_input_len, &mbs, &outLen) == -1) {
|
||||
code = TAOS_SYSTEM_ERROR(errno);
|
||||
taosReleaseConv(idx, conv, C2M);
|
||||
|
@ -439,7 +499,7 @@ int32_t taosUcs4ToMbsEx(TdUcs4 *ucs4, int32_t ucs4_max_len, char *mbs, iconv_t c
|
|||
if (ucs4_max_len == 0) {
|
||||
return 0;
|
||||
}
|
||||
if(ucs4_max_len < 0 || ucs4 == NULL || mbs == NULL) {
|
||||
if (ucs4_max_len < 0 || ucs4 == NULL || mbs == NULL) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return terrno;
|
||||
}
|
||||
|
@ -461,7 +521,7 @@ int32_t taosUcs4ToMbsEx(TdUcs4 *ucs4, int32_t ucs4_max_len, char *mbs, iconv_t c
|
|||
}
|
||||
|
||||
bool taosValidateEncodec(const char *encodec) {
|
||||
if(encodec == NULL) {
|
||||
if (encodec == NULL) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return false;
|
||||
}
|
||||
|
@ -513,7 +573,7 @@ int32_t taosHexEncode(const unsigned char *src, char *dst, int32_t len, int32_t
|
|||
}
|
||||
|
||||
int32_t taosHexDecode(const char *src, char *dst, int32_t len) {
|
||||
if(!src || !dst || len <= 0) {
|
||||
if (!src || !dst || len <= 0) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return terrno;
|
||||
}
|
||||
|
@ -558,7 +618,8 @@ int32_t taosMbsToWchars(TdWchar *pWchars, const char *pStrs, int32_t size) {
|
|||
|
||||
int32_t taosWcharToMb(char *pStr, TdWchar wchar) {
|
||||
OS_PARAM_CHECK(pStr);
|
||||
return wctomb(pStr, wchar); }
|
||||
return wctomb(pStr, wchar);
|
||||
}
|
||||
|
||||
char *taosStrCaseStr(const char *str, const char *pattern) {
|
||||
if (str == NULL) {
|
||||
|
@ -580,7 +641,7 @@ char *taosStrCaseStr(const char *str, const char *pattern) {
|
|||
}
|
||||
|
||||
int64_t taosStr2Int64(const char *str, char **pEnd, int32_t radix) {
|
||||
if(str == NULL) {
|
||||
if (str == NULL) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return 0;
|
||||
}
|
||||
|
@ -592,7 +653,7 @@ int64_t taosStr2Int64(const char *str, char **pEnd, int32_t radix) {
|
|||
}
|
||||
|
||||
uint64_t taosStr2UInt64(const char *str, char **pEnd, int32_t radix) {
|
||||
if(str == NULL) {
|
||||
if (str == NULL) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return 0;
|
||||
}
|
||||
|
@ -604,7 +665,7 @@ uint64_t taosStr2UInt64(const char *str, char **pEnd, int32_t radix) {
|
|||
}
|
||||
|
||||
int32_t taosStr2Int32(const char *str, char **pEnd, int32_t radix) {
|
||||
if(str == NULL) {
|
||||
if (str == NULL) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return 0;
|
||||
}
|
||||
|
@ -616,7 +677,7 @@ int32_t taosStr2Int32(const char *str, char **pEnd, int32_t radix) {
|
|||
}
|
||||
|
||||
uint32_t taosStr2UInt32(const char *str, char **pEnd, int32_t radix) {
|
||||
if(str == NULL) {
|
||||
if (str == NULL) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return 0;
|
||||
}
|
||||
|
@ -628,7 +689,7 @@ uint32_t taosStr2UInt32(const char *str, char **pEnd, int32_t radix) {
|
|||
}
|
||||
|
||||
int16_t taosStr2Int16(const char *str, char **pEnd, int32_t radix) {
|
||||
if(str == NULL) {
|
||||
if (str == NULL) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return 0;
|
||||
}
|
||||
|
@ -640,7 +701,7 @@ int16_t taosStr2Int16(const char *str, char **pEnd, int32_t radix) {
|
|||
}
|
||||
|
||||
uint16_t taosStr2UInt16(const char *str, char **pEnd, int32_t radix) {
|
||||
if(str == NULL) {
|
||||
if (str == NULL) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return 0;
|
||||
}
|
||||
|
@ -652,7 +713,7 @@ uint16_t taosStr2UInt16(const char *str, char **pEnd, int32_t radix) {
|
|||
}
|
||||
|
||||
int8_t taosStr2Int8(const char *str, char **pEnd, int32_t radix) {
|
||||
if(str == NULL) {
|
||||
if (str == NULL) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return 0;
|
||||
}
|
||||
|
@ -661,7 +722,7 @@ int8_t taosStr2Int8(const char *str, char **pEnd, int32_t radix) {
|
|||
}
|
||||
|
||||
uint8_t taosStr2UInt8(const char *str, char **pEnd, int32_t radix) {
|
||||
if(str == NULL) {
|
||||
if (str == NULL) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return 0;
|
||||
}
|
||||
|
@ -673,7 +734,7 @@ uint8_t taosStr2UInt8(const char *str, char **pEnd, int32_t radix) {
|
|||
}
|
||||
|
||||
double taosStr2Double(const char *str, char **pEnd) {
|
||||
if(str == NULL) {
|
||||
if (str == NULL) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return 0;
|
||||
}
|
||||
|
@ -682,7 +743,7 @@ double taosStr2Double(const char *str, char **pEnd) {
|
|||
}
|
||||
|
||||
float taosStr2Float(const char *str, char **pEnd) {
|
||||
if(str == NULL) {
|
||||
if (str == NULL) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return 0;
|
||||
}
|
||||
|
@ -698,7 +759,7 @@ bool isHex(const char *z, uint32_t n) {
|
|||
}
|
||||
|
||||
bool isValidateHex(const char *z, uint32_t n) {
|
||||
if(!z) {
|
||||
if (!z) {
|
||||
terrno = TSDB_CODE_INVALID_PARA;
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -151,17 +151,19 @@ static int32_t cfgCheckAndSetDir(SConfigItem *pItem, const char *inputDir) {
|
|||
}
|
||||
|
||||
static int32_t cfgSetBool(SConfigItem *pItem, const char *value, ECfgSrcType stype) {
|
||||
bool tmp = false;
|
||||
int32_t code = 0;
|
||||
bool tmp = false;
|
||||
if (strcasecmp(value, "true") == 0) {
|
||||
tmp = true;
|
||||
}
|
||||
if (atoi(value) > 0) {
|
||||
int32_t val = 0;
|
||||
if ((code = taosStr2int32(value, &val)) == 0 && val > 0) {
|
||||
tmp = true;
|
||||
}
|
||||
|
||||
pItem->bval = tmp;
|
||||
pItem->stype = stype;
|
||||
return 0;
|
||||
return code;
|
||||
}
|
||||
|
||||
static int32_t cfgSetInt32(SConfigItem *pItem, const char *value, ECfgSrcType stype) {
|
||||
|
@ -258,6 +260,7 @@ static int32_t cfgSetTimezone(SConfigItem *pItem, const char *value, ECfgSrcType
|
|||
|
||||
static int32_t cfgSetTfsItem(SConfig *pCfg, const char *name, const char *value, const char *level, const char *primary,
|
||||
const char *disable, ECfgSrcType stype) {
|
||||
int32_t code = 0;
|
||||
(void)taosThreadMutexLock(&pCfg->lock);
|
||||
|
||||
SConfigItem *pItem = cfgGetItem(pCfg, name);
|
||||
|
@ -278,9 +281,21 @@ static int32_t cfgSetTfsItem(SConfig *pCfg, const char *name, const char *value,
|
|||
|
||||
SDiskCfg cfg = {0};
|
||||
tstrncpy(cfg.dir, pItem->str, sizeof(cfg.dir));
|
||||
cfg.level = level ? atoi(level) : 0;
|
||||
cfg.primary = primary ? atoi(primary) : 1;
|
||||
cfg.disable = disable ? atoi(disable) : 0;
|
||||
|
||||
code = taosStr2int32(level, &cfg.level);
|
||||
if (code != 0) {
|
||||
cfg.level = 0;
|
||||
}
|
||||
code = taosStr2int32(primary, &cfg.primary);
|
||||
if (code != 0) {
|
||||
cfg.primary = 1;
|
||||
}
|
||||
|
||||
code = taosStr2int8(primary, &cfg.disable);
|
||||
if (code != 0) {
|
||||
cfg.disable = 0;
|
||||
}
|
||||
|
||||
void *ret = taosArrayPush(pItem->array, &cfg);
|
||||
if (ret == NULL) {
|
||||
(void)taosThreadMutexUnlock(&pCfg->lock);
|
||||
|
@ -412,6 +427,7 @@ void cfgLock(SConfig *pCfg) {
|
|||
void cfgUnLock(SConfig *pCfg) { (void)taosThreadMutexUnlock(&pCfg->lock); }
|
||||
|
||||
int32_t cfgCheckRangeForDynUpdate(SConfig *pCfg, const char *name, const char *pVal, bool isServer) {
|
||||
int32_t code = 0;
|
||||
ECfgDynType dynType = isServer ? CFG_DYN_SERVER : CFG_DYN_CLIENT;
|
||||
|
||||
cfgLock(pCfg);
|
||||
|
@ -443,8 +459,9 @@ int32_t cfgCheckRangeForDynUpdate(SConfig *pCfg, const char *name, const char *p
|
|||
}
|
||||
} break;
|
||||
case CFG_DTYPE_BOOL: {
|
||||
int32_t ival = (int32_t)atoi(pVal);
|
||||
if (ival != 0 && ival != 1) {
|
||||
int32_t ival = 0;
|
||||
code = taosStr2int32(pVal, &ival);
|
||||
if (code != 0 || (ival != 0 && ival != 1)) {
|
||||
uError("cfg:%s, type:%s value:%d out of range[0, 1]", pItem->name, cfgDtypeStr(pItem->dtype), ival);
|
||||
cfgUnLock(pCfg);
|
||||
TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);
|
||||
|
@ -887,9 +904,10 @@ void cfgDumpCfg(SConfig *pCfg, bool tsc, bool dump) {
|
|||
for (size_t j = 0; j < sz; ++j) {
|
||||
SDiskCfg *pCfg = taosArrayGet(pItem->array, j);
|
||||
if (dump) {
|
||||
(void)printf("%s %s %s l:%d p:%d d:%"PRIi8"\n", src, name, pCfg->dir, pCfg->level, pCfg->primary, pCfg->disable);
|
||||
(void)printf("%s %s %s l:%d p:%d d:%" PRIi8 "\n", src, name, pCfg->dir, pCfg->level, pCfg->primary,
|
||||
pCfg->disable);
|
||||
} else {
|
||||
uInfo("%s %s %s l:%d p:%d d:%"PRIi8, src, name, pCfg->dir, pCfg->level, pCfg->primary, pCfg->disable);
|
||||
uInfo("%s %s %s l:%d p:%d d:%" PRIi8, src, name, pCfg->dir, pCfg->level, pCfg->primary, pCfg->disable);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "taoserror.h"
|
||||
|
||||
int32_t taosVersionStrToInt(const char *vstr, int32_t *vint) {
|
||||
int32_t code = 0;
|
||||
if (vstr == NULL) {
|
||||
return terrno = TSDB_CODE_INVALID_VERSION_STRING;
|
||||
}
|
||||
|
@ -31,7 +32,11 @@ int32_t taosVersionStrToInt(const char *vstr, int32_t *vint) {
|
|||
if (vstr[spos] != '.') {
|
||||
tmp[spos - tpos] = vstr[spos];
|
||||
} else {
|
||||
vnum[vpos] = atoi(tmp);
|
||||
code = taosStr2int32(tmp, &vnum[vpos]);
|
||||
if (code != 0) {
|
||||
return code;
|
||||
}
|
||||
// vnum[vpos] = atoi(tmp);
|
||||
memset(tmp, 0, sizeof(tmp));
|
||||
vpos++;
|
||||
tpos = spos + 1;
|
||||
|
@ -39,7 +44,10 @@ int32_t taosVersionStrToInt(const char *vstr, int32_t *vint) {
|
|||
}
|
||||
|
||||
if ('\0' != tmp[0] && vpos < 4) {
|
||||
vnum[vpos] = atoi(tmp);
|
||||
code = taosStr2int32(tmp, &vnum[vpos]);
|
||||
if (code != 0) {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
if (vnum[0] <= 0) {
|
||||
|
|
Loading…
Reference in New Issue