about summary refs log tree commit diff
path: root/ctype/ctype.h
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/ctype.h
parentb8f558b7ace3a2e5e3234ac24a600cbe230da8d1 (diff)
downloadglibc-8d8c6efa78d0eb67138bddf96415c2b80a4c820c.tar.gz
glibc-8d8c6efa78d0eb67138bddf96415c2b80a4c820c.tar.xz
glibc-8d8c6efa78d0eb67138bddf96415c2b80a4c820c.zip
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/ctype.h')
-rw-r--r--ctype/ctype.h41
1 files changed, 30 insertions, 11 deletions
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.  */