Skip to content

Commit

Permalink
ctype: use less short names in public header
Browse files Browse the repository at this point in the history
We're seeing a build failure in GNU sim code which is using _P locally
but the ctype.h define clashes with it.  Rename these to use the same
symbols that glibc does.  They're a bit more verbose, but seems likely
that we'll have fewer conflicts if glibc isn't seeing them.

However, these shortnames are still used internally by ctype modules
to produce pretty concise source code, so move the short names to the
internal ctype_.h where short name conflicts shouldn't show up.
  • Loading branch information
vapier committed Nov 11, 2021
1 parent 88c9008 commit 3ba1bd0
Show file tree
Hide file tree
Showing 24 changed files with 69 additions and 56 deletions.
10 changes: 10 additions & 0 deletions newlib/libc/ctype/ctype_.h
@@ -1,5 +1,15 @@
#include <ctype.h>

/* Define some short names to keep internal files shorter. */
#define _U _ISupper
#define _L _ISlower
#define _N _ISdigit
#define _S _ISspace
#define _P _ISpunct
#define _C _IScntrl
#define _X _ISxdigit
#define _B _ISblank

#if (defined(__GNUC__) && !defined(__CHAR_UNSIGNED__) && !defined(COMPACT_CTYPE)) || defined (__CYGWIN__)
#define ALLOW_NEGATIVE_CTYPE_INDEX
#endif
Expand Down
2 changes: 1 addition & 1 deletion newlib/libc/ctype/isalnum.c
Expand Up @@ -46,5 +46,5 @@ No OS subroutines are required.
int
isalnum (int c)
{
return(__CTYPE_PTR[c+1] & (_U|_L|_N));
return(__CTYPE_PTR[c+1] & (_ISupper|_ISlower|_ISdigit));
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/isalnum_l.c
Expand Up @@ -6,5 +6,5 @@
int
isalnum_l (int c, struct __locale_t *locale)
{
return __locale_ctype_ptr_l (locale)[c+1] & (_U|_L|_N);
return __locale_ctype_ptr_l (locale)[c+1] & (_ISupper|_ISlower|_ISdigit);
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/isalpha.c
Expand Up @@ -45,5 +45,5 @@ No supporting OS subroutines are required.
int
isalpha (int c)
{
return(__CTYPE_PTR[c+1] & (_U|_L));
return(__CTYPE_PTR[c+1] & (_ISupper|_ISlower));
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/isalpha_l.c
Expand Up @@ -6,5 +6,5 @@
int
isalpha_l (int c, struct __locale_t *locale)
{
return __locale_ctype_ptr_l (locale)[c+1] & (_U|_L);
return __locale_ctype_ptr_l (locale)[c+1] & (_ISupper|_ISlower);
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/isblank.c
Expand Up @@ -44,5 +44,5 @@ No supporting OS subroutines are required.
int
isblank (int c)
{
return ((__CTYPE_PTR[c+1] & _B) || (c == '\t'));
return ((__CTYPE_PTR[c+1] & _ISblank) || (c == '\t'));
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/isblank_l.c
Expand Up @@ -6,5 +6,5 @@
int
isblank_l (int c, struct __locale_t *locale)
{
return (__locale_ctype_ptr_l (locale)[c+1] & _B) || (c == '\t');
return (__locale_ctype_ptr_l (locale)[c+1] & _ISblank) || (c == '\t');
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/iscntrl.c
Expand Up @@ -48,5 +48,5 @@ No supporting OS subroutines are required.
int
iscntrl (int c)
{
return(__CTYPE_PTR[c+1] & _C);
return(__CTYPE_PTR[c+1] & _IScntrl);
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/iscntrl_l.c
Expand Up @@ -6,5 +6,5 @@
int
iscntrl_l (int c, struct __locale_t *locale)
{
return __locale_ctype_ptr_l (locale)[c+1] & _C;
return __locale_ctype_ptr_l (locale)[c+1] & _IScntrl;
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/isdigit.c
Expand Up @@ -47,5 +47,5 @@ No supporting OS subroutines are required.
int
isdigit (int c)
{
return(__CTYPE_PTR[c+1] & _N);
return(__CTYPE_PTR[c+1] & _ISdigit);
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/isdigit_l.c
Expand Up @@ -6,5 +6,5 @@
int
isdigit_l (int c, struct __locale_t *locale)
{
return __locale_ctype_ptr_l (locale)[c+1] & _N;
return __locale_ctype_ptr_l (locale)[c+1] & _ISdigit;
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/islower.c
Expand Up @@ -45,5 +45,5 @@ No supporting OS subroutines are required.
int
islower (int c)
{
return ((__CTYPE_PTR[c+1] & (_U|_L)) == _L);
return ((__CTYPE_PTR[c+1] & (_ISupper|_ISlower)) == _ISlower);
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/islower_l.c
Expand Up @@ -6,5 +6,5 @@
int
islower_l (int c, struct __locale_t *locale)
{
return (__locale_ctype_ptr_l (locale)[c+1] & (_U|_L)) == _L;
return (__locale_ctype_ptr_l (locale)[c+1] & (_ISupper|_ISlower)) == _ISlower;
}
4 changes: 2 additions & 2 deletions newlib/libc/ctype/isprint.c
Expand Up @@ -59,13 +59,13 @@ No supporting OS subroutines are required.
int
isgraph (int c)
{
return(__CTYPE_PTR[c+1] & (_P|_U|_L|_N));
return(__CTYPE_PTR[c+1] & (_ISpunct|_ISupper|_ISlower|_ISdigit));
}


#undef isprint
int
isprint (int c)
{
return(__CTYPE_PTR[c+1] & (_P|_U|_L|_N|_B));
return(__CTYPE_PTR[c+1] & (_ISpunct|_ISupper|_ISlower|_ISdigit|_ISblank));
}
4 changes: 2 additions & 2 deletions newlib/libc/ctype/isprint_l.c
Expand Up @@ -6,13 +6,13 @@
int
isgraph_l (int c, struct __locale_t *locale)
{
return __locale_ctype_ptr_l (locale)[c+1] & (_P|_U|_L|_N);
return __locale_ctype_ptr_l (locale)[c+1] & (_ISpunct|_ISupper|_ISlower|_ISdigit);
}

#undef isprint_l

int
isprint_l (int c, struct __locale_t *locale)
{
return __locale_ctype_ptr_l (locale)[c+1] & (_P|_U|_L|_N|_B);
return __locale_ctype_ptr_l (locale)[c+1] & (_ISpunct|_ISupper|_ISlower|_ISdigit|_ISblank);
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/ispunct.c
Expand Up @@ -47,5 +47,5 @@ No supporting OS subroutines are required.
int
ispunct (int c)
{
return(__CTYPE_PTR[c+1] & _P);
return(__CTYPE_PTR[c+1] & _ISpunct);
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/ispunct_l.c
Expand Up @@ -6,6 +6,6 @@
int
ispunct_l (int c, struct __locale_t *locale)
{
return __locale_ctype_ptr_l (locale)[c+1] & _P;
return __locale_ctype_ptr_l (locale)[c+1] & _ISpunct;
}

2 changes: 1 addition & 1 deletion newlib/libc/ctype/isspace.c
Expand Up @@ -46,5 +46,5 @@ No supporting OS subroutines are required.
int
isspace (int c)
{
return(__CTYPE_PTR[c+1] & _S);
return(__CTYPE_PTR[c+1] & _ISspace);
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/isspace_l.c
Expand Up @@ -6,6 +6,6 @@
int
isspace_l (int c, struct __locale_t *locale)
{
return __locale_ctype_ptr_l (locale)[c+1] & _S;
return __locale_ctype_ptr_l (locale)[c+1] & _ISspace;
}

2 changes: 1 addition & 1 deletion newlib/libc/ctype/isupper.c
Expand Up @@ -43,5 +43,5 @@ No supporting OS subroutines are required.
int
isupper (int c)
{
return ((__CTYPE_PTR[c+1] & (_U|_L)) == _U);
return ((__CTYPE_PTR[c+1] & (_ISupper|_ISlower)) == _ISupper);
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/isupper_l.c
Expand Up @@ -6,6 +6,6 @@
int
isupper_l (int c, struct __locale_t *locale)
{
return (__locale_ctype_ptr_l (locale)[c+1] & (_U|_L)) == _U;
return (__locale_ctype_ptr_l (locale)[c+1] & (_ISupper|_ISlower)) == _ISupper;
}

2 changes: 1 addition & 1 deletion newlib/libc/ctype/isxdigit.c
Expand Up @@ -46,5 +46,5 @@ No supporting OS subroutines are required.
int
isxdigit (int c)
{
return(__CTYPE_PTR[c+1] & ((_X)|(_N)));
return(__CTYPE_PTR[c+1] & ((_ISxdigit)|(_ISdigit)));
}
2 changes: 1 addition & 1 deletion newlib/libc/ctype/isxdigit_l.c
Expand Up @@ -6,6 +6,6 @@
int
isxdigit_l (int c, struct __locale_t *locale)
{
return __locale_ctype_ptr_l (locale)[c+1] & ((_X)|(_N));
return __locale_ctype_ptr_l (locale)[c+1] & ((_ISxdigit)|(_ISdigit));
}

67 changes: 35 additions & 32 deletions newlib/libc/include/ctype.h
Expand Up @@ -57,14 +57,17 @@ extern int isascii_l (int __c, locale_t __l);
extern int toascii_l (int __c, locale_t __l);
#endif

#define _U 01
#define _L 02
#define _N 04
#define _S 010
#define _P 020
#define _C 040
#define _X 0100
#define _B 0200
enum
{
_ISupper = 01,
_ISlower = 02,
_ISdigit = 04,
_ISspace = 010,
_ISpunct = 020,
_IScntrl = 040,
_ISxdigit = 0100,
_ISblank = 0200,
};

/* For C++ backward-compatibility only. */
extern __IMPORT const char _ctype_[];
Expand All @@ -89,22 +92,22 @@ const char *__locale_ctype_ptr (void);
an out-of-bounds reference on a 64-bit machine. */
#define __ctype_lookup(__c) ((__CTYPE_PTR+sizeof(""[__c]))[(int)(__c)])

#define isalpha(__c) (__ctype_lookup(__c)&(_U|_L))
#define isupper(__c) ((__ctype_lookup(__c)&(_U|_L))==_U)
#define islower(__c) ((__ctype_lookup(__c)&(_U|_L))==_L)
#define isdigit(__c) (__ctype_lookup(__c)&_N)
#define isxdigit(__c) (__ctype_lookup(__c)&(_X|_N))
#define isspace(__c) (__ctype_lookup(__c)&_S)
#define ispunct(__c) (__ctype_lookup(__c)&_P)
#define isalnum(__c) (__ctype_lookup(__c)&(_U|_L|_N))
#define isprint(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N|_B))
#define isgraph(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N))
#define iscntrl(__c) (__ctype_lookup(__c)&_C)
#define isalpha(__c) (__ctype_lookup(__c) & (_ISupper|_ISlower))
#define isupper(__c) ((__ctype_lookup(__c) & (_ISupper|_ISlower)) == _ISupper)
#define islower(__c) ((__ctype_lookup(__c) & (_ISupper|_ISlower)) == _ISlower)
#define isdigit(__c) (__ctype_lookup(__c) & _ISdigit)
#define isxdigit(__c) (__ctype_lookup(__c) & (_ISxdigit|_ISdigit))
#define isspace(__c) (__ctype_lookup(__c) & _ISspace)
#define ispunct(__c) (__ctype_lookup(__c) & _ISpunct)
#define isalnum(__c) (__ctype_lookup(__c) & (_ISupper|_ISlower|_ISdigit))
#define isprint(__c) (__ctype_lookup(__c) & (_ISpunct|_ISupper|_ISlower|_ISdigit|_ISblank))
#define isgraph(__c) (__ctype_lookup(__c) & (_ISpunct|_ISupper|_ISlower|_ISdigit))
#define iscntrl(__c) (__ctype_lookup(__c) & _IScntrl)

#if defined(__GNUC__) && __ISO_C_VISIBLE >= 1999
#define isblank(__c) \
__extension__ ({ __typeof__ (__c) __x = (__c); \
(__ctype_lookup(__x)&_B) || (int) (__x) == '\t';})
(__ctype_lookup(__x)&_ISblank) || (int) (__x) == '\t';})
#endif

#if __POSIX_VISIBLE >= 200809
Expand All @@ -120,22 +123,22 @@ __locale_ctype_ptr_l(locale_t _l)
#endif
#define __ctype_lookup_l(__c,__l) ((__locale_ctype_ptr_l(__l)+sizeof(""[__c]))[(int)(__c)])

#define isalpha_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L))
#define isupper_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_U)
#define islower_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_L)
#define isdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&_N)
#define isxdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_X|_N))
#define isspace_l(__c,__l) (__ctype_lookup_l(__c,__l)&_S)
#define ispunct_l(__c,__l) (__ctype_lookup_l(__c,__l)&_P)
#define isalnum_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L|_N))
#define isprint_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N|_B))
#define isgraph_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N))
#define iscntrl_l(__c,__l) (__ctype_lookup_l(__c,__l)&_C)
#define isalpha_l(__c,__l) (__ctype_lookup_l(__c,__l) & (_ISupper|_ISlower))
#define isupper_l(__c,__l) ((__ctype_lookup_l(__c,__l) & (_ISupper|_ISlower)) == _ISupper)
#define islower_l(__c,__l) ((__ctype_lookup_l(__c,__l) & (_ISupper|_ISlower)) == _ISlower)
#define isdigit_l(__c,__l) (__ctype_lookup_l(__c,__l) & _ISdigit)
#define isxdigit_l(__c,__l) (__ctype_lookup_l(__c,__l) & (_ISxdigit|_ISdigit))
#define isspace_l(__c,__l) (__ctype_lookup_l(__c,__l) & _ISspace)
#define ispunct_l(__c,__l) (__ctype_lookup_l(__c,__l) & _ISpunct)
#define isalnum_l(__c,__l) (__ctype_lookup_l(__c,__l) & (_ISupper|_ISlower|_ISdigit))
#define isprint_l(__c,__l) (__ctype_lookup_l(__c,__l) & (_ISpunct|_ISupper|_ISlower|_ISdigit|_ISblank))
#define isgraph_l(__c,__l) (__ctype_lookup_l(__c,__l) & (_ISpunct|_ISupper|_ISlower|_ISdigit))
#define iscntrl_l(__c,__l) (__ctype_lookup_l(__c,__l) & _IScntrl)

#if defined(__GNUC__)
#define isblank_l(__c, __l) \
__extension__ ({ __typeof__ (__c) __x = (__c); \
(__ctype_lookup_l(__x,__l)&_B) || (int) (__x) == '\t';})
(__ctype_lookup_l(__x,__l)&_ISblank) || (int) (__x) == '\t';})
#endif

#endif /* __POSIX_VISIBLE >= 200809 */
Expand Down

0 comments on commit 3ba1bd0

Please sign in to comment.