| @@ -147,14 +147,14 @@ int json_parse_int64(const char *buf, int64_t *retval) | |||||
| int64_t num64; | int64_t num64; | ||||
| const char *buf_skip_space; | const char *buf_skip_space; | ||||
| int orig_has_neg; | int orig_has_neg; | ||||
| int _errno; | |||||
| int saved_errno; | |||||
| errno = 0; // sscanf won't always set errno, so initialize | errno = 0; // sscanf won't always set errno, so initialize | ||||
| if (sscanf(buf, "%" SCNd64, &num64) != 1) | if (sscanf(buf, "%" SCNd64, &num64) != 1) | ||||
| { | { | ||||
| MC_DEBUG("Failed to parse, sscanf != 1\n"); | MC_DEBUG("Failed to parse, sscanf != 1\n"); | ||||
| return 1; | return 1; | ||||
| } | } | ||||
| _errno = errno; | |||||
| saved_errno = errno; | |||||
| buf_skip_space = buf; | buf_skip_space = buf; | ||||
| orig_has_neg = 0; | orig_has_neg = 0; | ||||
| // Skip leading spaces | // Skip leading spaces | ||||
| @@ -171,7 +171,7 @@ int json_parse_int64(const char *buf, int64_t *retval) | |||||
| if (buf_skip_space[0] == '0' && buf_skip_space[1] == '\0') | if (buf_skip_space[0] == '0' && buf_skip_space[1] == '\0') | ||||
| orig_has_neg = 0; // "-0" is the same as just plain "0" | orig_has_neg = 0; // "-0" is the same as just plain "0" | ||||
| if (_errno != ERANGE) | |||||
| if (saved_errno != ERANGE) | |||||
| { | { | ||||
| char buf_cmp[100]; | char buf_cmp[100]; | ||||
| char *buf_cmp_start = buf_cmp; | char *buf_cmp_start = buf_cmp; | ||||
| @@ -199,10 +199,10 @@ int json_parse_int64(const char *buf, int64_t *retval) | |||||
| ) | ) | ||||
| ) | ) | ||||
| { | { | ||||
| _errno = ERANGE; | |||||
| saved_errno = ERANGE; | |||||
| } | } | ||||
| } | } | ||||
| if (_errno == ERANGE) | |||||
| if (saved_errno == ERANGE) | |||||
| { | { | ||||
| if (orig_has_neg) | if (orig_has_neg) | ||||
| num64 = INT64_MIN; | num64 = INT64_MIN; | ||||