summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog14
-rw-r--r--manual/stdio.texi7
-rw-r--r--math/bits/mathcalls.h4
-rw-r--r--posix/regex.c52
-rw-r--r--stdio-common/vfscanf.c19
5 files changed, 35 insertions, 61 deletions
diff --git a/ChangeLog b/ChangeLog
index 2b356755ca..cd59685b15 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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,
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 <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;
 		  }
 	      }
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);