18c34920f8
Fix numerous ANSI conformance bugs and other nits. ctype.h: o There were no prototypes behind the macros (conformance bug). o isascii() didn't have enough parentheses (plain bug). o tolower() and toupper were always static inline (conformance bug? You could undef them and take their address, but this gave different addresses in different modules. You couldn't undef them and declare them (correctly) again). <stdio.h>'s treatment of putc() shows one way to handle this problem, but it only works because the putc() macro is allowed to reevaluate its args. I used a hack controlled by _EXTERNALIZE_CTYPE_INLINES_ to get <ctype.h> to generate the code (the previous hack involving _ANSI_LIBRARY_ goes away). This has the advantage that the core of the functions is only written down once and the disadvantage that another layer of functions is required. The extra layer goes away if inline functions are used, leaving only the problem of understanding why there are functions named toupper(), __toupper and ___toupper() as well as a macro named toupper. o Nothing seems to define _USE_CTYPE_LIBRARY_. Eliminate it o Let the user set _USE_CTYPE_INLINE_ and _DONT_USE_CTYPE_INLINE_ for full control over inlining. o The args for the inline functions didn't have enough underscores (conformance bug). o The formatting and ordering was inconsistent (style bug). o TODO: fix conformance bugs brought by including <runetype.h>. |
||
---|---|---|
.. | ||
arpa | ||
protocols | ||
rpc | ||
rpcsvc | ||
_ctype.h | ||
a.out.h | ||
ar.h | ||
assert.h | ||
bitstring.h | ||
ctype.h | ||
db.h | ||
dirent.h | ||
disktab.h | ||
err.h | ||
f2c.h | ||
fnmatch.h | ||
fstab.h | ||
fts.h | ||
glob.h | ||
grp.h | ||
histedit.h | ||
kvm.h | ||
limits.h | ||
link.h | ||
locale.h | ||
Makefile | ||
malloc.h | ||
math.h | ||
memory.h | ||
mpool.h | ||
ndbm.h | ||
netdb.h | ||
nl_types.h | ||
nlist.h | ||
paths.h | ||
pwd.h | ||
ranlib.h | ||
regex.h | ||
regexp.h | ||
resolv.h | ||
rune.h | ||
runetype.h | ||
setjmp.h | ||
sgtty.h | ||
signal.h | ||
skey.h | ||
stab.h | ||
stddef.h | ||
stdio.h | ||
stdlib.h | ||
strhash.h | ||
string.h | ||
strings.h | ||
struct.h | ||
sysexits.h | ||
tar.h | ||
time.h | ||
ttyent.h | ||
tzfile.h | ||
unistd.h | ||
utime.h | ||
utmp.h | ||
vis.h |