summaryrefslogtreecommitdiff
path: root/ctype
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1999-02-07 00:06:12 +0000
committerUlrich Drepper <drepper@redhat.com>1999-02-07 00:06:12 +0000
commit8d8c6efa78d0eb67138bddf96415c2b80a4c820c (patch)
tree9ffb99e37931add0899606dc03b233a2e1e3f933 /ctype
parentb8f558b7ace3a2e5e3234ac24a600cbe230da8d1 (diff)
Update.
1999-02-06 Ulrich Drepper <drepper@cygnus.com> * Versions.def: Add versions for ld.so. * csu/Versions: Remove __libc_stack_end here. * elf/Versions: Split libc definitions in libc and ld.so definitions. * elf/Makefile (ld-map): Change to ld.so.map. * scripts/versions.awk: Recognize dot in library names. * ctype/ctype.h: Remove definitions of __tolower and __toupper. Don't use __tolower and __toupper in inline functions. Add optimizing macros for tolower and toupper. * ctype/ctype-extn.c (_tolower): Don't use __tolower. (_toupper): Don't use __toupper. * ctype/ctype.c (tolower): Don't use __tolower. (toupper): Don't use toupper. * nscd/cache.c (prune_cache): Correct printing of debugging messages. * resolv/Versions (libresolv): Export __ns_name_unpack and __ns_name_ntop. * resolv/res_comp.c: Rename ns_name_unpack to __ns_name_unpack and make it global. Change all users. Similar for ns_name_ntop. * resolv/nss_dns/dns-host.c: Don't use dn_expand when extracting in user-provided buffer. Use __ns_name_unpack and __ns_name_ntop directly to detect too small buffer. * stdio-common/Makefile (tests): Add scanf12. * stdio-common/scanf12.c: New file. * stdio-common/scanf12.input: New file. * stdio-common/vfscanf.c (__vfscanf): Handle +/- at beginning of floating-point correctly if the number is invalid. * stdio-common/vfscanf.c: Don't use non-reentrant multibyte conversion * stdio-common/printf_fphex.c: Likewise. * stdio-common/vfprintf.c: Likewise. See ChangeLog.9 for earlier changes.
Diffstat (limited to 'ctype')
-rw-r--r--ctype/ctype-extn.c4
-rw-r--r--ctype/ctype.c4
-rw-r--r--ctype/ctype.h41
3 files changed, 34 insertions, 15 deletions
diff --git a/ctype/ctype-extn.c b/ctype/ctype-extn.c
index d229f60b77..5daba66804 100644
--- a/ctype/ctype-extn.c
+++ b/ctype/ctype-extn.c
@@ -30,12 +30,12 @@ isblank (int c)
int
_tolower (int c)
{
- return __tolower (c);
+ return c < -128 || c > 255 ? c : __ctype_tolower[c];
}
int
_toupper (int c)
{
- return __toupper (c);
+ return c < -128 || c > 255 ? c : __ctype_toupper[c];
}
int
diff --git a/ctype/ctype.c b/ctype/ctype.c
index ce6d7097f0..61e7684d6f 100644
--- a/ctype/ctype.c
+++ b/ctype/ctype.c
@@ -39,11 +39,11 @@ func (isxdigit, _ISxdigit)
int
tolower (int c)
{
- return c >= -128 && c < 256 ? __tolower (c) : c;
+ return c >= -128 && c < 256 ? __ctype_tolower[c] : c;
}
int
toupper (int c)
{
- return c >= -128 && c < 256 ? __toupper (c) : c;
+ return c >= -128 && c < 256 ? __ctype_toupper[c] : c;
}
diff --git a/ctype/ctype.h b/ctype/ctype.h
index 52bb56eeec..de7ca1e355 100644
--- a/ctype/ctype.h
+++ b/ctype/ctype.h
@@ -82,9 +82,6 @@ extern __const __int32_t *__ctype_toupper; /* Case conversions. */
#define __isascii(c) (((c) & ~0x7f) == 0) /* If C is a 7 bit value. */
#define __toascii(c) ((c) & 0x7f) /* Mask off high bits. */
-#define __tolower(c) ((int) __ctype_tolower[(int) (c)])
-#define __toupper(c) ((int) __ctype_toupper[(int) (c)])
-
#define __exctype(name) extern int name __P ((int))
/* The following names are all functions:
@@ -128,7 +125,8 @@ extern int toascii __P ((int __c));
#endif /* Use SVID or use misc. */
#if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
-/* These are the same as `toupper' and `tolower'. */
+/* These are the same as `toupper' and `tolower' except that they do not
+ check the argument for being in the range of a `char'. */
__exctype (_toupper);
__exctype (_tolower);
#endif
@@ -151,26 +149,47 @@ __exctype (_tolower);
#endif
#if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ \
- && defined __USE_EXTERN_INLINES
+ && defined __USE_EXTERN_INLINES
extern __inline int
tolower (int __c)
{
- return __c >= -128 && __c < 256 ? __tolower (__c) : __c;
+ return __c >= -128 && __c < 256 ? __ctype_tolower[__c] : __c;
}
extern __inline int
toupper (int __c)
{
- return __c >= -128 && __c < 256 ? __toupper (__c) : __c;
+ return __c >= -128 && __c < 256 ? __ctype_toupper[__c] : __c;
}
#endif
+#if __GNUC__ >= 2 && defined __OPTIMIZE__
+# define __tobody(c, f, a) \
+ ({ int __res; \
+ if (sizeof (c) > 1) \
+ { \
+ if (__builtin_constant_p (c)) \
+ { \
+ int __c = (c); \
+ __res = __c < -128 || __c > 255 ? __c : a[__c]; \
+ } \
+ else \
+ __res = f (c); \
+ } \
+ else \
+ __res = a[(int) (c)]; \
+ __res; })
+
+# define tolower(c) __tobody (c, tolower, __ctype_tolower)
+# define toupper(c) __tobody (c, toupper, __ctype_toupper)
+#endif /* Optimizing gcc */
+
#if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
-# define isascii(c) __isascii(c)
-# define toascii(c) __toascii(c)
+# define isascii(c) __isascii (c)
+# define toascii(c) __toascii (c)
-# define _tolower(c) __tolower(c)
-# define _toupper(c) __toupper(c)
+# define _tolower(c) ((int) __ctype_tolower[(int) (c)])
+# define _toupper(c) ((int) __ctype_toupper[(int) (c)])
#endif
#endif /* Not __NO_CTYPE. */