diff options
Diffstat (limited to 'src/microhttpd/mhd_str.c')
-rw-r--r-- | src/microhttpd/mhd_str.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/microhttpd/mhd_str.c b/src/microhttpd/mhd_str.c index efe31f12..9c1c5172 100644 --- a/src/microhttpd/mhd_str.c +++ b/src/microhttpd/mhd_str.c | |||
@@ -1168,12 +1168,8 @@ MHD_str_to_uvalue_n_ (const char *str, | |||
1168 | { | 1168 | { |
1169 | size_t i; | 1169 | size_t i; |
1170 | uint64_t res; | 1170 | uint64_t res; |
1171 | int digit; | ||
1172 | const uint64_t max_v_div_b = max_val / base; | 1171 | const uint64_t max_v_div_b = max_val / base; |
1173 | const uint64_t max_v_mod_b = max_val % base; | 1172 | const uint64_t max_v_mod_b = max_val % base; |
1174 | /* 'digit->value' must be function, not macro */ | ||
1175 | int (*const dfunc)(char) = (base == 16) ? | ||
1176 | toxdigitvalue : todigitvalue; | ||
1177 | 1173 | ||
1178 | if (! str || ! out_val || | 1174 | if (! str || ! out_val || |
1179 | ((base != 16) && (base != 10)) ) | 1175 | ((base != 16) && (base != 10)) ) |
@@ -1181,8 +1177,13 @@ MHD_str_to_uvalue_n_ (const char *str, | |||
1181 | 1177 | ||
1182 | res = 0; | 1178 | res = 0; |
1183 | i = 0; | 1179 | i = 0; |
1184 | while (maxlen > i && 0 <= (digit = dfunc (str[i]))) | 1180 | while (maxlen > i) |
1185 | { | 1181 | { |
1182 | const int digit = (base == 16) ? | ||
1183 | toxdigitvalue (str[i]) : todigitvalue (str[i]); | ||
1184 | |||
1185 | if (0 > digit) | ||
1186 | break; | ||
1186 | if ( ((max_v_div_b) < res) || | 1187 | if ( ((max_v_div_b) < res) || |
1187 | (( (max_v_div_b) == res) && ( (max_v_mod_b) < (uint64_t) digit) ) ) | 1188 | (( (max_v_div_b) == res) && ( (max_v_mod_b) < (uint64_t) digit) ) ) |
1188 | return 0; | 1189 | return 0; |