[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[no subject]
I'd appreciate comments of the attached patch which fixes this issue
and brings <ctype.h> up to conformance.
Best regards,
Mike Barcroft
--fdj2RfSjLxBAspz7
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="ctype.diff"
ctype.diff
o Fix namespace scope issues in <ctype.h> by using the relatively new
visibility primitives.
o Implement _tolower() and _toupper() POSIX.1-2001 (XSI) macros in
<ctype.h>.
o Make <runetype.h> pollutant-free so that it can safely be included
in <ctype.h>.
o Add a typedef in <rune.h> to compensate for <runetype.h> being
pollutant-free.
Index: ctype.h
===================================================================
RCS file: /work/repo/src/include/ctype.h,v
retrieving revision 1.22
diff -u -r1.22 ctype.h
--- ctype.h 21 Aug 2002 16:19:55 -0000 1.22
+++ ctype.h 2 Sep 2002 18:07:04 -0000
@@ -45,10 +45,6 @@
#ifndef _CTYPE_H_
#define _CTYPE_H_
-/*
- * XXX <runetype.h> brings massive namespace pollution (rune_t and struct
- * member names).
- */
#include <runetype.h>
#define _CTYPE_A 0x00000100L /* Alpha */
@@ -85,9 +81,15 @@
int tolower(int);
int toupper(int);
-#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
-int digittoint(int);
+#if __XSI_VISIBLE
+int _tolower(int);
+int _toupper(int);
int isascii(int);
+int toascii(int);
+#endif
+
+#if __BSD_VISIBLE
+int digittoint(int);
int isblank(int);
int ishexnumber(int);
int isideogram(int);
@@ -95,7 +97,6 @@
int isphonogram(int);
int isrune(int);
int isspecial(int);
-int toascii(int);
#endif
__END_DECLS
@@ -113,9 +114,23 @@
#define tolower(c) __tolower(c)
#define toupper(c) __toupper(c)
-#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
-#define digittoint(c) __maskrune((c), 0xFF)
+#if __XSI_VISIBLE
+/*
+ * POSIX.1-2001 specifies _tolower() and _toupper() to be macros equivalent to
+ * tolower() and toupper() respectively, minus extra checking to ensure that
+ * the argument is a lower or uppercase letter respectively. We've chosen to
+ * implement these macros with the same error checking as tolower() and
+ * toupper() since this doesn't violate the specification itself, only its
+ * intent.
+ */
+#define _tolower(c) __tolower(c)
+#define _toupper(c) __toupper(c)
#define isascii(c) (((c) & ~0x7F) == 0)
+#define toascii(c) ((c) & 0x7F)
+#endif
+
+#if __BSD_VISIBLE
+#define digittoint(c) __maskrune((c), 0xFF)
#define isblank(c) __istype((c), _CTYPE_B)
#define ishexnumber(c) __istype((c), _CTYPE_X)
#define isideogram(c) __istype((c), _CTYPE_I)
@@ -123,10 +138,9 @@
#define isphonogram(c) __istype((c), _CTYPE_Q)
#define isrune(c) __istype((c), 0xFFFFFF00L)
#define isspecial(c) __istype((c), _CTYPE_T)
-#define toascii(c) ((c) & 0x7F)
#endif
-/* See comments in <machine/_types.h> about __ct_rune_t. */
+/* See comments in <sys/_types.h> about __ct_rune_t. */
__BEGIN_DECLS
unsigned long ___runetype(__ct_rune_t);
__ct_rune_t ___tolower(__ct_rune_t);
Index: rune.h
===================================================================
RCS file: /work/repo/src/include/rune.h,v
retrieving revision 1.2
diff -u -r1.2 rune.h
--- rune.h 23 Mar 2002 17:24:53 -0000 1.2
+++ rune.h 1 Sep 2002 18:27:08 -0000
@@ -40,8 +40,13 @@
#ifndef _RUNE_H_
#define _RUNE_H_
-#include <runetype.h>
#include <stdio.h>
+#include <runetype.h>
+
+#ifndef _RUNE_T_DECLARED
+#define _RUNE_T_DECLARED
+typedef __rune_t rune_t;
+#endif
#define _PATH_LOCALE "/usr/share/locale"
Index: runetype.h
===================================================================
RCS file: /work/repo/src/include/runetype.h,v
retrieving revision 1.7
diff -u -r1.7 runetype.h
--- runetype.h 21 Aug 2002 16:19:55 -0000 1.7
+++ runetype.h 2 Sep 2002 17:18:18 -0000
@@ -43,23 +43,6 @@
#include <sys/cdefs.h>
#include <sys/_types.h>
-#ifndef _RUNE_T_DECLARED
-typedef __rune_t rune_t;
-#define _RUNE_T_DECLARED
-#endif
-
-#ifndef _SIZE_T_DECLARED
-typedef __size_t size_t;
-#define _SIZE_T_DECLARED
-#endif
-
-#ifndef __cplusplus
-#ifndef _WCHAR_T_DECLARED
-typedef __wchar_t wchar_t;
-#define _WCHAR_T_DECLARED
-#endif
-#endif
-
#define _CACHED_RUNES (1 <<8 ) /* Must be a power of 2 */
#define _CRMASK (~(_CACHED_RUNES - 1))
@@ -67,9 +50,9 @@
* The lower 8 bits of runetype[] contain the digit value of the rune.
*/
typedef struct {
- rune_t min; /* First rune of the range */
- rune_t max; /* Last rune (inclusive) of the range */
- rune_t map; /* What first maps to in maps */
+ __rune_t min; /* First rune of the range */
+ __rune_t max; /* Last rune (inclusive) of the range */
+ __rune_t map; /* What first maps to in maps */
unsigned long *types; /* Array of types in range */
} _RuneEntry;
@@ -82,13 +65,13 @@
char magic[8]; /* Magic saying what version we are */
char encoding[32]; /* ASCII name of this encoding */
- rune_t (*sgetrune)(const char *, size_t, char const **);
- int (*sputrune)(rune_t, char *, size_t, char **);
- rune_t invalid_rune;
+ __rune_t (*sgetrune)(const char *, __size_t, char const **);
+ int (*sputrune)(__rune_t, char *, __size_t, char **);
+ __rune_t invalid_rune;
unsigned long runetype[_CACHED_RUNES];
- rune_t maplower[_CACHED_RUNES];
- rune_t mapupper[_CACHED_RUNES];
+ __rune_t maplower[_CACHED_RUNES];
+ __rune_t mapupper[_CACHED_RUNES];
/*
* The following are to deal with Runes larger than _CACHED_RUNES - 1.
--fdj2RfSjLxBAspz7--
To Unsubscribe: send mail to majordomo@xxxxxxxxxxx
with "unsubscribe freebsd-standards" in the body of the message