diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-03-17 21:53:01 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2007-03-17 21:53:01 +0000 |
commit | 6ce38a95a4c8318df75cf91fbd90101601b3fa7f (patch) | |
tree | 044df11ca5f10f967644dffe5b0f621d6ac36188 /stdlib/strtod_l.c | |
parent | b428b742cf54d423e5a7a68fcbec9473303eeafa (diff) | |
download | glibc-6ce38a95a4c8318df75cf91fbd90101601b3fa7f.tar glibc-6ce38a95a4c8318df75cf91fbd90101601b3fa7f.tar.gz glibc-6ce38a95a4c8318df75cf91fbd90101601b3fa7f.tar.bz2 glibc-6ce38a95a4c8318df75cf91fbd90101601b3fa7f.zip |
Updated to fedora-glibc-20070317T2130cvs/fedora-glibc-2_5_90-19
Diffstat (limited to 'stdlib/strtod_l.c')
-rw-r--r-- | stdlib/strtod_l.c | 57 |
1 files changed, 32 insertions, 25 deletions
diff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c index bb7493bff0..4033e3bef8 100644 --- a/stdlib/strtod_l.c +++ b/stdlib/strtod_l.c @@ -482,7 +482,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) struct locale_data *current = loc->__locales[LC_NUMERIC]; - if (group) + if (__builtin_expect (group, 0)) { grouping = _NL_CURRENT (LC_NUMERIC, GROUPING); if (*grouping <= 0 || *grouping == CHAR_MAX) @@ -548,7 +548,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) && (wint_t) cp[1] >= L'0' && (wint_t) cp[1] <= L'9') { /* We accept it. This funny construct is here only to indent - the code directly. */ + the code correctly. */ } #else for (cnt = 0; decimal[cnt] != '\0'; ++cnt) @@ -557,13 +557,15 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) if (decimal[cnt] == '\0' && cp[cnt] >= '0' && cp[cnt] <= '9') { /* We accept it. This funny construct is here only to indent - the code directly. */ + the code correctly. */ } #endif else if (c < L_('0') || c > L_('9')) { /* Check for `INF' or `INFINITY'. */ - if (TOLOWER_C (c) == L_('i') && STRNCASECMP (cp, L_("inf"), 3) == 0) + CHAR_TYPE lowc = TOLOWER_C (c); + + if (lowc == L_('i') && STRNCASECMP (cp, L_("inf"), 3) == 0) { /* Return +/- infinity. */ if (endptr != NULL) @@ -574,7 +576,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL; } - if (TOLOWER_C (c) == L_('n') && STRNCASECMP (cp, L_("nan"), 3) == 0) + if (lowc == L_('n') && STRNCASECMP (cp, L_("nan"), 3) == 0) { /* Return NaN. */ FLOAT retval = NAN; @@ -588,7 +590,8 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) do ++cp; while ((*cp >= L_('0') && *cp <= L_('9')) - || (TOLOWER (*cp) >= L_('a') && TOLOWER (*cp) <= L_('z')) + || ({ CHAR_TYPE lo = TOLOWER (*cp); + lo >= L_('a') && lo <= L_('z'); }) || *cp == L_('_')); if (*cp != L_(')')) @@ -640,7 +643,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) while (c == L'0' || ((wint_t) thousands != L'\0' && c == (wint_t) thousands)) c = *++cp; #else - if (thousands == NULL) + if (__builtin_expect (thousands == NULL, 1)) while (c == '0') c = *++cp; else @@ -664,9 +667,9 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) /* If no other digit but a '0' is found the result is 0.0. Return current read pointer. */ + CHAR_TYPE lowc = TOLOWER (c); if (!((c >= L_('0') && c <= L_('9')) - || (base == 16 && ((CHAR_TYPE) TOLOWER (c) >= L_('a') - && (CHAR_TYPE) TOLOWER (c) <= L_('f'))) + || (base == 16 && lowc >= L_('a') && lowc <= L_('f')) || ( #ifdef USE_WIDE_CHAR c == (wint_t) decimal @@ -682,11 +685,11 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) && (base != 16 || cp != start_of_digits || (cp[decimal_len] >= L_('0') && cp[decimal_len] <= L_('9')) - || ((CHAR_TYPE) TOLOWER (cp[decimal_len]) >= L_('a') - && (CHAR_TYPE) TOLOWER (cp[decimal_len]) <= L_('f')))) + || ({ CHAR_TYPE lo = TOLOWER (cp[decimal_len]); + lo >= L_('a') && lo <= L_('f'); }))) || (base == 16 && (cp != start_of_digits - && (CHAR_TYPE) TOLOWER (c) == L_('p'))) - || (base != 16 && (CHAR_TYPE) TOLOWER (c) == L_('e')))) + && lowc == L_('p'))) + || (base != 16 && lowc == L_('e')))) { #ifdef USE_WIDE_CHAR tp = __correctly_grouped_prefixwc (start_of_digits, cp, thousands, @@ -707,17 +710,19 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) while (1) { if ((c >= L_('0') && c <= L_('9')) - || (base == 16 && (wint_t) TOLOWER (c) >= L_('a') - && (wint_t) TOLOWER (c) <= L_('f'))) + || (base == 16 + && ({ CHAR_TYPE lo = TOLOWER (c); + lo >= L_('a') && lo <= L_('f'); }))) ++dig_no; else { #ifdef USE_WIDE_CHAR - if ((wint_t) thousands == L'\0' || c != (wint_t) thousands) + if (__builtin_expect ((wint_t) thousands == L'\0', 1) + || c != (wint_t) thousands) /* Not a digit or separator: end of the integer part. */ break; #else - if (thousands == NULL) + if (__builtin_expect (thousands == NULL, 1)) break; else { @@ -733,7 +738,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) c = *++cp; } - if (grouping && cp > start_of_digits) + if (__builtin_expect (grouping != NULL, 0) && cp > start_of_digits) { /* Check the grouping of the digits. */ #ifdef USE_WIDE_CHAR @@ -794,7 +799,8 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) cp += decimal_len; c = *cp; while ((c >= L_('0') && c <= L_('9')) || - (base == 16 && TOLOWER (c) >= L_('a') && TOLOWER (c) <= L_('f'))) + (base == 16 && ({ CHAR_TYPE lo = TOLOWER (c); + lo >= L_('a') && lo <= L_('f'); }))) { if (c != L_('0') && lead_zero == -1) lead_zero = dig_no - int_no; @@ -807,8 +813,9 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) expp = cp; /* Read exponent. */ - if ((base == 16 && TOLOWER (c) == L_('p')) - || (base != 16 && TOLOWER (c) == L_('e'))) + lowc = TOLOWER (c); + if ((base == 16 && lowc == L_('p')) + || (base != 16 && lowc == L_('e'))) { int exp_negative = 0; @@ -840,7 +847,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) exponent *= 10; exponent += c - L_('0'); - if (exponent > exp_limit) + if (__builtin_expect (exponent > exp_limit, 0)) /* The exponent is too large/small to represent a valid number. */ { @@ -1024,13 +1031,13 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) exponent -= incr; } - if (int_no + exponent > MAX_10_EXP + 1) + if (__builtin_expect (int_no + exponent > MAX_10_EXP + 1, 0)) { __set_errno (ERANGE); return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL; } - if (exponent < MIN_10_EXP - (DIG + 1)) + if (__builtin_expect (exponent < MIN_10_EXP - (DIG + 1), 0)) { __set_errno (ERANGE); return 0.0; @@ -1094,7 +1101,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) /* Now we know the exponent of the number in base two. Check it against the maximum possible exponent. */ - if (bits > MAX_EXP) + if (__builtin_expect (bits > MAX_EXP, 0)) { __set_errno (ERANGE); return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL; |