Glasgow Haskell on different versions of Linux
Glynn Clements
glynn.clements at virgin.net
Wed Jun 9 08:00:16 EDT 2004
Volker Stolz wrote:
> > > What is "ctype.h" good for?
> >
> > A good question. Its only use seems to be in
> > ghc/rts/RtsFlags.c where it is used for functions
> > like isdigit and isspace for decoding the RTS flags.
> > Maybe it should be retired altogether.
> >
> > I'm rather puzzled how this works if ctype.h isn't
> > there at all, as it seems to.
>
> The functions are C89, so they should be present *somewhere* in libc
> anywhere.
Actually, in GNU libc, isspace, isdigit etc are usually macros which
read a flag word from the __ctype_b array then "and" it with the
corresponding attribute mask.
extern __const unsigned short int *__ctype_b; /* Characteristics. */
...
#define __isctype(c, type) \
(__ctype_b[(int) (c)] & (unsigned short int) type)
...
# define isdigit(c) __isctype((c), _ISdigit)
...
# define isspace(c) __isctype((c), _ISspace)
However, glibc does export functions with those names, and you can
disable the macros by defining the __NO_CTYPE macro, with the result
that the binary depends upon isspace, isdigit etc rather than
__ctype_b.
I don't have glibc 2.3 here, but presumably __ctype_b has changed in
an incompatible manner (maybe there are more than 16 flags in 2.3, in
which case an unsigned short would no longer be sufficient).
--
Glynn Clements <glynn.clements at virgin.net>
More information about the Glasgow-haskell-users
mailing list