Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2009-05-01 02:53:00 +0400
committerEric Blake <eblake@redhat.com>2009-05-01 02:53:00 +0400
commit82b77480f797603e3425228b83ed3c0cbc2a2977 (patch)
tree2a010ef8c9c4b40a9b8354f4e8493f002e35aeea /newlib/libc
parent47b09662ee3bfc612507f15e1d4ab6af7046ed61 (diff)
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.
Diffstat (limited to 'newlib/libc')
-rw-r--r--newlib/libc/include/ctype.h23
1 files changed, 17 insertions, 6 deletions
diff --git a/newlib/libc/include/ctype.h b/newlib/libc/include/ctype.h
index acded28e8..e1d2d01c8 100644
--- a/newlib/libc/include/ctype.h
+++ b/newlib/libc/include/ctype.h
@@ -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__