This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[COMMITTED PATCH] Clean up internal ctype.h header.
- From: Roland McGrath <roland at hack dot frob dot com>
- To: "GNU C. Library" <libc-alpha at sourceware dot org>
- Date: Thu, 30 Oct 2014 14:06:38 -0700 (PDT)
- Subject: [COMMITTED PATCH] Clean up internal ctype.h header.
- Authentication-results: sourceware.org; auth=none
This avoids some badness such as defining extern inlines before their
normal extern declarations. In general, every include/foo.h wrapper should
start with #include <foo/foo.h>.
This has almost no effect on generated code. On x86_64-linux-gnu with gcc
4.8.2, only nsswitch.c and getaddrinfo.c produced slightly different code.
It differs in some register allocation and scheduling choices, but does not
appear to differ in any meaningful way. I have no idea why the code
differs at all.
Thanks,
Roland
2014-10-30 Roland McGrath <roland@hack.frob.com>
* include/ctype.h: Include <ctype/ctype.h> first thing rather than
after defining inlines. Instead, just use parens to defeat macro
expansion of __isctype in its declaration.
--- a/include/ctype.h
+++ b/include/ctype.h
@@ -1,11 +1,15 @@
#ifndef _CTYPE_H
+#include <ctype/ctype.h>
+
#ifndef _ISOMAC
/* Initialize ctype locale data. */
extern void __ctype_init (void);
libc_hidden_proto (__ctype_init)
-extern int __isctype (int __c, int __mask);
+/* ctype/ctype.h defined this as a macro and we don't want to #undef it.
+ So defeat macro expansion with parens for this declaration. */
+extern int (__isctype) (int __c, int __mask);
# ifndef NOT_IN_libc
@@ -46,22 +50,18 @@ __ctype_tolower_loc (void)
return __libc_tsd_address (const int32_t *, CTYPE_TOLOWER);
}
-# endif /* Not NOT_IN_libc. */
-#endif
-
-#include <ctype/ctype.h>
-
-#ifndef _ISOMAC
-# if !defined __NO_CTYPE && !defined NOT_IN_libc
+# ifndef __NO_CTYPE
/* The spec says that isdigit must only match the decimal digits. We
can check this without a memory access. */
-# undef isdigit
-# define isdigit(c) ({ int __c = (c); __c >= '0' && __c <= '9'; })
-# undef isdigit_l
-# define isdigit_l(c, l) ({ int __c = (c); __c >= '0' && __c <= '9'; })
-# undef __isdigit_l
-# define __isdigit_l(c, l) ({ int __c = (c); __c >= '0' && __c <= '9'; })
-# endif
-#endif
+# undef isdigit
+# define isdigit(c) ({ int __c = (c); __c >= '0' && __c <= '9'; })
+# undef isdigit_l
+# define isdigit_l(c, l) ({ int __c = (c); __c >= '0' && __c <= '9'; })
+# undef __isdigit_l
+# define __isdigit_l(c, l) ({ int __c = (c); __c >= '0' && __c <= '9'; })
+# endif /* Not __NO_CTYPE. */
+
+# endif /* Not NOT_IN_libc. */
+#endif /* Not _ISOMAC. */
#endif /* ctype.h */