A few non-ctype-related comments:
Omit parens around arguments of 'defined', e.g., say "defined __MVS__"
not "defined (__MVS__)".
I agree with Eric that we should rename "__string" rather than fiddle
with #undefing it. It's just a placeholder name. I suggest renaming it
to "__str". We can backport this to glibc eventually.
In strtod.c, don't bother with "if (errno == ERANGE) errno = 0;". Just
do "errno = 0;".
Also in strtod.c, don't assume isnand exists. That is, replace
"!isnand(num)" with "num == num".
Update serial numbers in changed .m4 files.
In m4/fclose.m4, gl_FUNC_FCLOSE should AC_REQUIRE([AC_CANONICAL_HOST]).
Also, it should test $host_os rather than $host.
In m4/strstr.m4, the __MVS__ failure should be at compile-time, with
#error, rather than at run-time. That's better if cross-compiling.
In comments, prefer imperatives, e.g., "Instead, temporarily redefine
..." rather than "Instead, we temporarily redefine ...". This is
standard GNU style and is shorter.
The get_rusage_as code has duplications. Simpler would be:
uintptr_t
get_rusage_as (void)
{
/* On Mac OS X, AIX, Cygwin, and z/OS, get_rusage_as_via_setrlimit
exists but does not work. */
#if (! ((defined __APPLE__ && defined __MACH__) \
|| defined _AIX || defined __CYGWIN__ || defined __MVS__) \
&& HAVE_SETRLIMIT && defined RLIMIT_AS && HAVE_SYS_MMAN_H &&
HAVE_MPROTECT)
/* Prefer get_rusage_as_via_setrlimit() if it succeeds,
because the caller may want to use the result with setrlimit(). */
uintptr_t result = get_rusage_as_via_setrlimit ();
if (result != 0)
return result;
#endif
return get_rusage_as_via_iterator ();
}