2001-11-26  Ulrich Drepper  <drepper@redhat.com>

	* 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  <meyering@lucent.com>

	* posix/regex.c (iswctype, mbrtowc, wcslen, wcscoll, wcrtomb) [_LIBC]:
	Define to be __-prefixed.
	Remove unnecessary duplication in `#ifdef _LIBC' blocks.
This commit is contained in:
Ulrich Drepper 2001-11-27 02:20:12 +00:00
parent 05957bbd90
commit f4efd06825
5 changed files with 35 additions and 61 deletions

View File

@ -1,3 +1,17 @@
2001-11-26 Ulrich Drepper <drepper@redhat.com>
* 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 <meyering@lucent.com>
* 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 <aj@suse.de>
* sysdeps/unix/sysv/linux/hppa/brk.c: Remove __brk_addr alias,

View File

@ -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

View File

@ -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));

View File

@ -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 <locale/localeinfo.h>
@ -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;
}
}

View File

@ -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);