ref: 48b1122427a38f74c8f65b5bb177687b8004e205
parent: 4c3cba66c9294430e5d9a843b3b6e5127c81b2e3
author: Ori Bernstein <ori@eigenstate.org>
date: Sat Aug 29 07:09:20 EDT 2020
ape/ctype.h: add isblank, fix functions (thanks staalmannen) Our ctype.h mistakenly ommitted isblank. Add it in. While we're here, the make the 'isfoo()' functions are broken: they're offsetting into the array, and don't work with negative character values. Sync the function bodies with the macros, and make them produce correct results.
--- a/sys/include/ape/ctype.h
+++ b/sys/include/ape/ctype.h
@@ -8,6 +8,7 @@
extern int isalnum(int);
extern int isalpha(int);
+extern int isblank(int);
extern int iscntrl(int);
extern int isdigit(int);
extern int isgraph(int);
@@ -38,6 +39,7 @@
extern unsigned char _ctype[];
#define isalnum(c) (_ctype[(unsigned char)(c)]&(_ISupper|_ISlower|_ISdigit))
#define isalpha(c) (_ctype[(unsigned char)(c)]&(_ISupper|_ISlower))
+#define isblank(c) (_ctype[(unsigned char)(c)]&_ISblank)
#define iscntrl(c) (_ctype[(unsigned char)(c)]&_IScntrl)
#define isdigit(c) (_ctype[(unsigned char)(c)]&_ISdigit)
#define isgraph(c) (_ctype[(unsigned char)(c)]&(_ISpunct|_ISupper|_ISlower|_ISdigit))
--- a/sys/src/ape/lib/ap/gen/isalnum.c
+++ b/sys/src/ape/lib/ap/gen/isalnum.c
@@ -2,6 +2,7 @@
#undef isalnum
#undef isalpha
+#undef isblank
#undef iscntrl
#undef isdigit
#undef isgraph
@@ -11,14 +12,16 @@
#undef isspace
#undef isupper
#undef isxdigit
-int isalnum(int c){ return (_ctype+1)[c]&(_ISupper|_ISlower|_ISdigit); }-int isalpha(int c){ return (_ctype+1)[c]&(_ISupper|_ISlower); }-int iscntrl(int c){ return (_ctype+1)[c]&_IScntrl; }-int isdigit(int c){ return (_ctype+1)[c]&_ISdigit; }-int isgraph(int c){ return (_ctype+1)[c]&(_ISpunct|_ISupper|_ISlower|_ISdigit); }-int islower(int c){ return (_ctype+1)[c]&_ISlower; }-int isprint(int c){ return (_ctype+1)[c]&(_ISpunct|_ISupper|_ISlower|_ISdigit|_ISblank); }-int ispunct(int c){ return (_ctype+1)[c]&_ISpunct; }-int isspace(int c){ return (_ctype+1)[c]&_ISspace; }-int isupper(int c){ return (_ctype+1)[c]&_ISupper; }-int isxdigit(int c){ return (_ctype+1)[c]&_ISxdigit; }+
+int isalnum(int c) {return _ctype[(unsigned char)(c)]&(_ISupper|_ISlower|_ISdigit);}+int isalpha(int c) {return _ctype[(unsigned char)(c)]&(_ISupper|_ISlower);}+int isblank(int c) {return _ctype[(unsigned char)(c)]&_ISblank;}+int iscntrl(int c) {return _ctype[(unsigned char)(c)]&_IScntrl;}+int isdigit(int c) {return _ctype[(unsigned char)(c)]&_ISdigit;}+int isgraph(int c) {return _ctype[(unsigned char)(c)]&(_ISpunct|_ISupper|_ISlower|_ISdigit);}+int islower(int c) {return _ctype[(unsigned char)(c)]&_ISlower;}+int isprint(int c) {return _ctype[(unsigned char)(c)]&(_ISpunct|_ISupper|_ISlower|_ISdigit|_ISblank);}+int ispunct(int c) {return _ctype[(unsigned char)(c)]&_ISpunct;}+int isspace(int c) {return _ctype[(unsigned char)(c)]&_ISspace;}+int isupper(int c) {return _ctype[(unsigned char)(c)]&_ISupper;}+int isxdigit(int c) {return _ctype[(unsigned char)(c)]&_ISxdigit;}--
⑨