diff --git a/ChangeLog b/ChangeLog index 2b356755ca..cd59685b15 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2001-11-26 Ulrich Drepper + + * stdio-common/vfscanf.c: If incomplete nan of inf(inity) strings + are found call conv_error and not input_error [PR libc/2669]. + + * math/bits/mathcalls.h: Mark ceil and floor as const. + Reported by David Mosberger. + +2001-11-21 Jim Meyering + + * posix/regex.c (iswctype, mbrtowc, wcslen, wcscoll, wcrtomb) [_LIBC]: + Define to be __-prefixed. + Remove unnecessary duplication in `#ifdef _LIBC' blocks. + 2001-11-26 Andreas Jaeger * sysdeps/unix/sysv/linux/hppa/brk.c: Remove __brk_addr alias, diff --git a/manual/stdio.texi b/manual/stdio.texi index ce27805557..da29f43867 100644 --- a/manual/stdio.texi +++ b/manual/stdio.texi @@ -1383,9 +1383,10 @@ If @var{c} is @code{EOF}, @code{ungetc} does nothing and just returns The character that you push back doesn't have to be the same as the last character that was actually read from the stream. In fact, it isn't necessary to actually read any characters from the stream before -unreading them with @code{ungetc}! But that is a strange way to write -a program; usually @code{ungetc} is used only to unread a character -that was just read from the same stream. +unreading them with @code{ungetc}! But that is a strange way to write a +program; usually @code{ungetc} is used only to unread a character that +was just read from the same stream. The GNU C library supports this +even on files opened in binary mode, but other systems might not. The GNU C library only supports one character of pushback---in other words, it does not work to call @code{ungetc} twice without doing input diff --git a/math/bits/mathcalls.h b/math/bits/mathcalls.h index c1181f737c..12fcfce022 100644 --- a/math/bits/mathcalls.h +++ b/math/bits/mathcalls.h @@ -159,13 +159,13 @@ __MATHCALL (cbrt,, (_Mdouble_ __x)); /* Nearest integer, absolute value, and remainder functions. */ /* Smallest integral value not less than X. */ -__MATHCALL (ceil,, (_Mdouble_ __x)); +__MATHCALLX (ceil,, (_Mdouble_ __x), (__const__)); /* Absolute value of X. */ __MATHCALLX (fabs,, (_Mdouble_ __x), (__const__)); /* Largest integer not greater than X. */ -__MATHCALL (floor,, (_Mdouble_ __x)); +__MATHCALLX (floor,, (_Mdouble_ __x), (__const__)); /* Floating-point modulo remainder of X/Y. */ __MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y)); diff --git a/posix/regex.c b/posix/regex.c index 5793950083..567c7d0b97 100644 --- a/posix/regex.c +++ b/posix/regex.c @@ -82,6 +82,11 @@ # define re_compile_fastmap(bufp) __re_compile_fastmap (bufp) # define btowc __btowc +# define iswctype __iswctype +# define mbrtowc __mbrtowc +# define wcslen __wcslen +# define wcscoll __wcscoll +# define wcrtomb __wcrtomb /* We are also using some library internals. */ # include @@ -1284,11 +1289,7 @@ convert_mbs_to_wcs (dest, src, len, offset_buffer, is_binary) for( ; mb_remain > 0 ; ++wc_count, ++pdest, mb_remain -= consumed, psrc += consumed) { -#ifdef _LIBC - consumed = __mbrtowc (pdest, psrc, mb_remain, &mbs); -#else consumed = mbrtowc (pdest, psrc, mb_remain, &mbs); -#endif if (consumed <= 0) /* failed to convert. maybe src contains binary data. @@ -3309,13 +3310,8 @@ PREFIX(regex_compile) (ARG_PREFIX(pattern), ARG_PREFIX(size), syntax, bufp) for (ch = 0; ch < 1 << BYTEWIDTH; ++ch) { -# ifdef _LIBC - if (__iswctype (__btowc (ch), wt)) - SET_LIST_BIT (ch); -# else if (iswctype (btowc (ch), wt)) SET_LIST_BIT (ch); -# endif if (translate && (is_upper || is_lower) && (ISUPPER (ch) || ISLOWER (ch))) @@ -4631,11 +4627,7 @@ truncate_wchar (c) mbstate_t state; int retval; memset (&state, '\0', sizeof (state)); -# ifdef _LIBC - retval = __wcrtomb (buf, c, &state); -# else retval = wcrtomb (buf, c, &state); -# endif return retval > 0 ? buf[0] : (unsigned char) c; } #endif /* WCHAR */ @@ -6435,13 +6427,8 @@ byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos, & ~(uintptr_t)(__alignof__(wctype_t) - 1); wctype = *((wctype_t*)alignedp); workp += CHAR_CLASS_SIZE; -# ifdef _LIBC - if (__iswctype((wint_t)c, wctype)) - goto char_set_matched; -# else if (iswctype((wint_t)c, wctype)) goto char_set_matched; -# endif } /* match with collating_symbol? */ @@ -6477,20 +6464,12 @@ byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos, for (workp2 = workp + coll_symbol_length ; workp < workp2 ;) { const CHAR_T *backup_d = d, *backup_dend = dend; -# ifdef _LIBC - length = __wcslen (workp); -# else length = wcslen (workp); -# endif /* If wcscoll(the collating symbol, whole string) > 0, any substring of the string never match with the collating symbol. */ -# ifdef _LIBC - if (__wcscoll (workp, d) > 0) -# else if (wcscoll (workp, d) > 0) -# endif { workp += length + 1; continue; @@ -6515,11 +6494,7 @@ byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos, str_buf[i] = TRANSLATE(*d); str_buf[i+1] = '\0'; -# ifdef _LIBC - match = __wcscoll (workp, str_buf); -# else match = wcscoll (workp, str_buf); -# endif if (match == 0) goto char_set_matched; @@ -6630,20 +6605,12 @@ byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos, for (workp2 = workp + equiv_class_length ; workp < workp2 ;) { const CHAR_T *backup_d = d, *backup_dend = dend; -# ifdef _LIBC - length = __wcslen (workp); -# else length = wcslen (workp); -# endif /* If wcscoll(the collating symbol, whole string) > 0, any substring of the string never match with the collating symbol. */ -# ifdef _LIBC - if (__wcscoll (workp, d) > 0) -# else if (wcscoll (workp, d) > 0) -# endif { workp += length + 1; break; @@ -6668,11 +6635,7 @@ byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos, str_buf[i] = TRANSLATE(*d); str_buf[i+1] = '\0'; -# ifdef _LIBC - match = __wcscoll (workp, str_buf); -# else match = wcscoll (workp, str_buf); -# endif if (match == 0) goto char_set_matched; @@ -6754,13 +6717,8 @@ byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos, range_end_char = str_buf + 4; } -# ifdef _LIBC - if (__wcscoll (range_start_char, str_buf+2) <= 0 - && __wcscoll (str_buf+2, range_end_char) <= 0) -# else if (wcscoll (range_start_char, str_buf+2) <= 0 && wcscoll (str_buf+2, range_end_char) <= 0) -# endif goto char_set_matched; } } diff --git a/stdio-common/vfscanf.c b/stdio-common/vfscanf.c index 0b53d7e0b6..b4b7d4dff1 100644 --- a/stdio-common/vfscanf.c +++ b/stdio-common/vfscanf.c @@ -1596,7 +1596,8 @@ __vfscanf (FILE *s, const char *format, va_list argptr) if (width == 0 || inchar () == EOF) /* EOF is only an input error before we read any chars. */ conv_error (); - if (! ISDIGIT (c) && TOLOWER (c) != L_('i')) + if (! ISDIGIT (c) && TOLOWER (c) != L_('i') + && TOLOWER (c) != L_('n')) { #ifdef COMPILE_WSCANF if (c != decimal) @@ -1654,12 +1655,12 @@ __vfscanf (FILE *s, const char *format, va_list argptr) /* Maybe "nan". */ ADDW (c); if (width == 0 || inchar () == EOF || TOLOWER (c) != L_('a')) - input_error (); + conv_error (); if (width > 0) --width; ADDW (c); if (width == 0 || inchar () == EOF || TOLOWER (c) != L_('n')) - input_error (); + conv_error (); if (width > 0) --width; ADDW (c); @@ -1671,12 +1672,12 @@ __vfscanf (FILE *s, const char *format, va_list argptr) /* Maybe "inf" or "infinity". */ ADDW (c); if (width == 0 || inchar () == EOF || TOLOWER (c) != L_('n')) - input_error (); + conv_error (); if (width > 0) --width; ADDW (c); if (width == 0 || inchar () == EOF || TOLOWER (c) != L_('f')) - input_error (); + conv_error (); if (width > 0) --width; ADDW (c); @@ -1691,25 +1692,25 @@ __vfscanf (FILE *s, const char *format, va_list argptr) ADDW (c); if (width == 0 || inchar () == EOF || TOLOWER (c) != L_('n')) - input_error (); + conv_error (); if (width > 0) --width; ADDW (c); if (width == 0 || inchar () == EOF || TOLOWER (c) != L_('i')) - input_error (); + conv_error (); if (width > 0) --width; ADDW (c); if (width == 0 || inchar () == EOF || TOLOWER (c) != L_('t')) - input_error (); + conv_error (); if (width > 0) --width; ADDW (c); if (width == 0 || inchar () == EOF || TOLOWER (c) != L_('y')) - input_error (); + conv_error (); if (width > 0) --width; ADDW (c);