From 7f7f27483996ae9fcb2ed4fb0a3690280cda7b4a Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 10 Feb 1995 17:01:56 +0000 Subject: use Py_CHARMASK --- Modules/regexmodule.c | 4 ++-- Modules/stropmodule.c | 24 ++++++++++-------------- Python/ceval.c | 3 ++- Python/compile.c | 4 ++-- Python/mystrtoul.c | 14 +++++++++++--- 5 files changed, 27 insertions(+), 22 deletions(-) diff --git a/Modules/regexmodule.c b/Modules/regexmodule.c index b9f75a0..9b40ab5 100644 --- a/Modules/regexmodule.c +++ b/Modules/regexmodule.c @@ -35,7 +35,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "modsupport.h" #include "regexpr.h" -#include "ctype.h" +#include static object *RegexError; /* Exception */ @@ -433,7 +433,7 @@ symcomp(pattern, gdict) ++o; /* eat the '>' */ break; } - if (!isalnum(*o) && *o != '_') { + if (!isalnum(Py_CHARMASK(*o)) && *o != '_') { o = backtrack; break; } diff --git a/Modules/stropmodule.c b/Modules/stropmodule.c index 326dfb8..90ee4fd 100644 --- a/Modules/stropmodule.c +++ b/Modules/stropmodule.c @@ -41,7 +41,6 @@ strop_split(self, args) { int len, i, j, err; char *s; - char c; object *list, *item; if (!getargs(args, "s#", &s, &len)) @@ -52,13 +51,11 @@ strop_split(self, args) i = 0; while (i < len) { - while (i < len && - ((c = s[i]), isspace(c))) { + while (i < len && isspace(Py_CHARMASK(s[i]))) { i = i+1; } j = i; - while (i < len && - !((c = s[i]), isspace(c))) { + while (i < len && isspace(Py_CHARMASK(s[i]))) { i = i+1; } if (j < i) { @@ -269,20 +266,19 @@ strop_strip(self, args) { char *s; int len, i, j; - char c; if (!getargs(args, "s#", &s, &len)) return NULL; i = 0; - while (i < len && ((c = s[i]), isspace(c))) { + while (i < len && isspace(Py_CHARMASK(s[i]))) { i++; } j = len; do { j--; - } while (j >= i && ((c = s[j]), isspace(c))); + } while (j >= i && isspace(Py_CHARMASK(s[i]))); j++; if (i == 0 && j == len) { @@ -312,7 +308,7 @@ strop_lower(self, args) s_new = getstringvalue(new); changed = 0; for (i = 0; i < n; i++) { - char c = *s++; + int c = Py_CHARMASK(*s++); if (isupper(c)) { changed = 1; *s_new = tolower(c); @@ -347,7 +343,7 @@ strop_upper(self, args) s_new = getstringvalue(new); changed = 0; for (i = 0; i < n; i++) { - char c = *s++; + int c = Py_CHARMASK(*s++); if (islower(c)) { changed = 1; *s_new = toupper(c); @@ -382,7 +378,7 @@ strop_swapcase(self, args) s_new = getstringvalue(new); changed = 0; for (i = 0; i < n; i++) { - char c = *s++; + int c = Py_CHARMASK(*s++); if (islower(c)) { changed = 1; *s_new = toupper(c); @@ -530,7 +526,7 @@ initstrop() /* Create 'whitespace' object */ n = 0; - for (c = 1; c < 256; c++) { + for (c = 0; c < 256; c++) { if (isspace(c)) buf[n++] = c; } @@ -541,7 +537,7 @@ initstrop() } /* Create 'lowercase' object */ n = 0; - for (c = 1; c < 256; c++) { + for (c = 0; c < 256; c++) { if (islower(c)) buf[n++] = c; } @@ -553,7 +549,7 @@ initstrop() /* Create 'uppercase' object */ n = 0; - for (c = 1; c < 256; c++) { + for (c = 0; c < 256; c++) { if (isupper(c)) buf[n++] = c; } diff --git a/Python/ceval.c b/Python/ceval.c index 48fce5b..411e7f3 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -753,7 +753,8 @@ eval_code(co, globals, locals, owner, arg) /* XXX move into writeobject() ? */ char *s = getstringvalue(v); int len = getstringsize(v); - if (len > 0 && isspace(s[len-1]) && + if (len > 0 && + isspace(Py_CHARMASK(s[len-1])) && s[len-1] != ' ') softspace(w, 0); } diff --git a/Python/compile.c b/Python/compile.c index 45bed39..cb25da2 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -608,12 +608,12 @@ parsestr(s) *p++ = c; break; case 'x': - if (isxdigit(*s)) { + if (isxdigit(Py_CHARMASK(*s))) { sscanf(s, "%x", &c); *p++ = c; do { s++; - } while (isxdigit(*s)); + } while (isxdigit(Py_CHARMASK(*s))); break; } /* FALLTHROUGH */ diff --git a/Python/mystrtoul.c b/Python/mystrtoul.c index e7c0a57..a646283 100644 --- a/Python/mystrtoul.c +++ b/Python/mystrtoul.c @@ -26,6 +26,14 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "config.h" #endif +/* Convert a possibly signed character to a nonnegative int */ +/* XXX This assumes characters are 8 bits wide */ +#ifdef __CHAR_UNSIGNED__ +#define Py_CHARMASK(c) (c) +#else +#define Py_CHARMASK(c) ((c) & 0xff) +#endif + #include "rename2.h" /* strtol and strtoul, renamed to avoid conflicts */ @@ -70,7 +78,7 @@ int base; } /* skip leading white space */ - while (*str && isspace(*str)) + while (*str && isspace(Py_CHARMASK(*str))) str++; /* check for leading 0 or 0x for auto-base or base 16 */ @@ -99,7 +107,7 @@ int base; } /* do the conversion */ - while (c = *str) + while (c = Py_CHARMASK(*str)) { if (isdigit(c) && c - '0' < base) c -= '0'; @@ -143,7 +151,7 @@ int base; long result; char sign; - while (*str && isspace(*str)) + while (*str && isspace(Py_CHARMASK(*str))) str++; sign = *str; -- cgit v0.12