[PATCH][STEP 2] ctype changes for removing locale structures
Craig Howland
howland@LGSInnovations.com
Fri Feb 9 15:50:00 GMT 2018
On 02/09/2018 10:06 AM, Jaap de Wolff wrote:
> modify ctype not to use __locale_ctype_ptr (== __CTYPE_PTR) or
> __locale_ctype_ptr_l
> To do this al inline functions are removed, and the source implementations
> test hard coded values of the given characters
>
>
> ================================== PATCH =================
> diff --git a/newlib/libc/ctype/isalnum.c b/newlib/libc/ctype/isalnum.c
> index d926f97b7..6d3864114 100644
> --- a/newlib/libc/ctype/isalnum.c
> +++ b/newlib/libc/ctype/isalnum.c
> @@ -46,5 +46,9 @@ No OS subroutines are required.
> int
> isalnum (int c)
> {
> +#ifdef _REENT_SMALL
> + return (isdigit(c) | islower(c) | isupper(c));
> +#else
> return(__CTYPE_PTR[c+1] & (_U|_L|_N));
> +#endif
> }
I would think that we should be able to do better than this, as this method is
taking a half step backwards for some of the functions, such as isalnum(). That
is, it potentially loses the efficiency of doing one table lookup plus one OR,
as it needs to do N table lookups and N+N-1 ORs (where N appears to be from
1-3). I say "potentially" because maybe the compiler would end up reducing it
to the 1+1 case, but maybe not, too (depending on compiler, compiler settings).Â
Before locale was added, isalnum(), for example, was
return(__ctype_ptr__[c+1] & (_U|_L));
I'm not sure what the right thing is now (still __ctype_ptr__?), but the same
basic thing ought to work, knowing the right thing to put in. But for that
matter, why not in the REENT_SMALL case simply redefine __CTYPE_PTR to point to
the right thing? Then all these other source file changes become unnecessary.Â
It seems reasonable to expect this to work, and it would be a cleaner solution
(since the is*.c files remain untouched, without #ifs). The stated purpose of
the patch is to stop ctype from using __locale_ctype_ptr, but ctype.h is where
it is defined to be __CTYPE_PTR--so just define it differently.
Craig
More information about the Newlib
mailing list