This commit is contained in:
Bob Liu 2023-12-07 12:02:04 +08:00
parent 8f5df0b6a3
commit 07af4e9a08
1 changed files with 20 additions and 36 deletions

View File

@ -120,42 +120,34 @@ int32_t toDoubleEx(const char *z, int32_t n, uint32_t type, double* value) {
} }
int32_t toIntegerEx(const char *z, int32_t n, uint32_t type, int64_t *value) { int32_t toIntegerEx(const char *z, int32_t n, uint32_t type, int64_t *value) {
if (n == 0) {
*value = 0;
return TSDB_CODE_SUCCESS;
}
errno = 0; errno = 0;
char *endPtr = NULL; char *endPtr = NULL;
bool parsed = false;
switch (type) switch (type)
{ {
case TK_NK_INTEGER: { case TK_NK_INTEGER: {
*value = taosStr2Int64(z, &endPtr, 10); *value = taosStr2Int64(z, &endPtr, 10);
parsed = true; if (errno == ERANGE || errno == EINVAL || endPtr - z != n) {
return TSDB_CODE_FAILED;
}
return TSDB_CODE_SUCCESS;
} break; } break;
case TK_NK_FLOAT: { case TK_NK_FLOAT: {
double val = round(taosStr2Double(z, &endPtr)); double val = round(taosStr2Double(z, &endPtr));
parsed = true;
if (!IS_VALID_INT64(val)) { if (!IS_VALID_INT64(val)) {
return TSDB_CODE_FAILED; return TSDB_CODE_FAILED;
} }
if (errno == ERANGE || errno == EINVAL || endPtr - z != n) {
return TSDB_CODE_FAILED;
}
*value = val; *value = val;
return TSDB_CODE_SUCCESS;
} break; } break;
default: default:
break; break;
} }
if (parsed) { if (n == 0) {
if (errno == ERANGE || errno == EINVAL) { *value = 0;
return TSDB_CODE_FAILED;
}
while (n > 1 && z[n-1] == ' ') {
n--;
}
if (endPtr - z != n) {
return TSDB_CODE_FAILED;
}
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
@ -229,14 +221,8 @@ int32_t toIntegerEx(const char *z, int32_t n, uint32_t type, int64_t *value) {
} }
int32_t toUIntegerEx(const char *z, int32_t n, uint32_t type, uint64_t *value) { int32_t toUIntegerEx(const char *z, int32_t n, uint32_t type, uint64_t *value) {
if (n == 0) {
*value = 0;
return TSDB_CODE_SUCCESS;
}
errno = 0; errno = 0;
char *endPtr = NULL; char *endPtr = NULL;
bool parsed = false;
const char *p = z; const char *p = z;
while (*p == ' ') { while (*p == ' ') {
p++; p++;
@ -247,30 +233,28 @@ int32_t toUIntegerEx(const char *z, int32_t n, uint32_t type, uint64_t *value) {
if (*p == '-' && *value) { if (*p == '-' && *value) {
return TSDB_CODE_FAILED; return TSDB_CODE_FAILED;
} }
parsed = true; if (errno == ERANGE || errno == EINVAL || endPtr - z != n) {
return TSDB_CODE_FAILED;
}
return TSDB_CODE_SUCCESS;
} break; } break;
case TK_NK_FLOAT: { case TK_NK_FLOAT: {
double val = round(taosStr2Double(p, &endPtr)); double val = round(taosStr2Double(p, &endPtr));
if (!IS_VALID_UINT64(val)) { if (!IS_VALID_UINT64(val)) {
return TSDB_CODE_FAILED; return TSDB_CODE_FAILED;
} }
if (errno == ERANGE || errno == EINVAL || endPtr - z != n) {
return TSDB_CODE_FAILED;
}
*value = val; *value = val;
parsed = true; return TSDB_CODE_SUCCESS;
} break; } break;
default: default:
break; break;
} }
if (parsed) { if (n == 0) {
if (errno == ERANGE || errno == EINVAL) { *value = 0;
return TSDB_CODE_FAILED;
}
while (n > 1 && z[n-1] == ' ') {
n--;
}
if (endPtr - z != n) {
return TSDB_CODE_FAILED;
}
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }