The value (1ULL << 63) - 1), used for checking that integer values are
within range, actually mean INT64_MAX, so use that instead.
Also, the negative case is not quite right: the value -(INT64_MAX + 1),
-
9223372036854775808, is within the range of a signed 64-bits number
(assuming two's complement), but is not accepted right now. Adjust the
check so it accepts that value.
I tested this patch manually: we accept -
9223372036854775808 but reject
-
9223372036854775809.
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
/* Negative integer */
uint64_t int_val = state->scanner->value.v_int64;
- if (int_val > (1ULL << 63) - 1) {
+ if (int_val > (((uint64_t) INT64_MAX) + 1)) {
g_string_append_printf(state->ini_error,
"Integer value -%" PRIu64 " is outside the range of a 64-bit signed integer\n",
int_val);
/* Positive integer */
uint64_t int_val = state->scanner->value.v_int64;
- if (int_val > (1ULL << 63) - 1) {
+ if (int_val > INT64_MAX) {
g_string_append_printf(state->ini_error,
"Integer value %" PRIu64 " is outside the range of a 64-bit signed integer\n",
int_val);