This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH/RFA] Distinguish between EOF and character with value 0xff


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

According to Eric Blake on 4/24/2009 6:41 AM:
> Would it also be okay to apply this?  The idea is that on cygwin, even
> though we must call the function to support particular locales, we can
> still be nice and warn about invalid uses of toupper((char)ch).

Updated version fixes the regression I added to the return type of toupper
on single charset platforms, and adds support for the gcc warning under
multi charset platforms.  I tested that on cygwin, compilation with -O1 is
identical to the old form.  OK to apply?

2009-04-29  Eric Blake  <ebb9@byu.net>

	Allow gcc warning for toupper even with extended charsets.
	* libc/include/ctype.h (toupper, tolower)
	[_MB_EXTENDED_CHARSETS_ISO]: Allow gcc warning when called with
	'char' even when we must call the function for correct behavior.
	[!_MB_EXTENDED_CHARSETS_ISO]: Fix regression in result type.

- --
Don't work too hard, make some time for fun as well!

Eric Blake             ebb9@byu.net
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkn4SwAACgkQ84KuGfSFAYCDwQCfY2Vc+IapkgIZBWa5SCW0yYaA
G7MAoJEZkmWXtkeapF7wWV3xLrhxufXn
=77Fu
-----END PGP SIGNATURE-----
Index: libc/include/ctype.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/ctype.h,v
retrieving revision 1.19
diff -u -p -r1.19 ctype.h
--- libc/include/ctype.h	24 Apr 2009 12:27:36 -0000	1.19
+++ libc/include/ctype.h	29 Apr 2009 12:38:38 -0000
@@ -71,14 +71,25 @@ extern	__IMPORT char	*__ctype_ptr__;
 /* Non-gcc versions will get the library versions, and will be
    slightly slower.  These macros are not NLS-aware so they are
    disabled if the system supports the extended character sets. */
-# if defined(__GNUC__) && !defined (_MB_EXTENDED_CHARSETS_ISO) && !defined (_MB_EXTENDED_CHARSETS_WINDOWS)
-# define toupper(__c) \
+# if defined(__GNUC__)
+#  if !defined (_MB_EXTENDED_CHARSETS_ISO) && !defined (_MB_EXTENDED_CHARSETS_WINDOWS)
+#   define toupper(__c) \
   __extension__ ({ __typeof__ (__c) __x = (__c);	\
-      islower(__x) ? (__x - 'a' + 'A') : __x;})
-# define tolower(__c) \
+      islower (__x) ? (int) __x - 'a' + 'A' : (int) __x;})
+#   define tolower(__c) \
   __extension__ ({ __typeof__ (__c) __x = (__c);	\
-      isupper(__x) ? (__x - 'A' + 'a') : __x;})
-#endif
+      isupper (__x) ? (int) __x - 'A' + 'a' : (int) __x;})
+#  else /* _MB_EXTENDED_CHARSETS* */
+/* Allow a gcc warning if the user passed 'char', but defer to the
+   function.  */
+#   define toupper(__c) \
+  __extension__ ({ __typeof__ (__c) __x = (__c);	\
+      (void) __ctype_ptr__[__x]; (toupper) (__x);})
+#   define tolower(__c) \
+  __extension__ ({ __typeof__ (__c) __x = (__c);	\
+      (void) __ctype_ptr__[__x]; (tolower) (__x);})
+#  endif /* _MB_EXTENDED_CHARSETS* */
+# endif /* __GNUC__ */
 #endif /* !__cplusplus */
 
 #ifndef __STRICT_ANSI__

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]