]> sourceware.org Git - newlib-cygwin.git/commitdiff
Allow gcc warning for toupper even with extended charsets.
authorEric Blake <eblake@redhat.com>
Thu, 30 Apr 2009 22:53:00 +0000 (22:53 +0000)
committerEric Blake <eblake@redhat.com>
Thu, 30 Apr 2009 22:53:00 +0000 (22:53 +0000)
* 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.

newlib/ChangeLog
newlib/libc/include/ctype.h

index 64a6a1eb5cfb1ae4708a97b0ee46ca3def6e5bb4..251c90334945565d5a0d72d6825f5190904ce50b 100644 (file)
@@ -1,3 +1,11 @@
+2009-04-30  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.
+
 2009-04-24  Jeff johnston  <jjohnstn@redhat.com>
 
        * libc/stdio/fgetc.c: Make sure sfp lock is acquired before the
index acded28e88fbac189b25858409ab811d754aa209..e1d2d01c880736ec62808369795b50919efa2ff8 100644 (file)
@@ -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__
This page took 0.058554 seconds and 5 git commands to generate.