summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2013-02-09 22:11:27 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2013-02-09 22:11:27 (GMT)
commit4de7457009d3dac9c93cc5b471d20a8d5e92ff33 (patch)
tree7dd778385f577557e4fdafb09e55e1b9485f9407
parentb6ed17344b456f397df800cc553fef94f5b1e58b (diff)
downloadcpython-4de7457009d3dac9c93cc5b471d20a8d5e92ff33.zip
cpython-4de7457009d3dac9c93cc5b471d20a8d5e92ff33.tar.gz
cpython-4de7457009d3dac9c93cc5b471d20a8d5e92ff33.tar.bz2
Issue #17173: Remove uses of locale-dependent C functions (isalpha() etc.) in the interpreter.
I've left a couple of them in: zlib (third-party lib), getaddrinfo.c (doesn't include Python.h, and probably obsolete), _sre.c (legitimate use for the re.LOCALE flag).
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/_struct.c4
-rw-r--r--Modules/binascii.c2
-rw-r--r--Modules/posixmodule.c2
-rw-r--r--Modules/socketmodule.c2
-rw-r--r--Objects/longobject.c4
-rw-r--r--Objects/stringlib/formatter.h2
-rw-r--r--Python/ast.c2
-rw-r--r--Python/dynload_aix.c3
-rw-r--r--Python/getargs.c6
-rw-r--r--Python/mystrtoul.c6
11 files changed, 19 insertions, 17 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index a24b3de..8fe5e16 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@ What's New in Python 3.2.4
Core and Builtins
-----------------
+- Issue #17173: Remove uses of locale-dependent C functions (isalpha() etc.)
+ in the interpreter.
+
- Issue #17043: The unicode-internal decoder no longer read past the end of
input buffer.
diff --git a/Modules/_struct.c b/Modules/_struct.c
index edbe9b9..3f20518 100644
--- a/Modules/_struct.c
+++ b/Modules/_struct.c
@@ -1184,7 +1184,7 @@ prepare_s(PyStructObject *self)
size = 0;
len = 0;
while ((c = *s++) != '\0') {
- if (isspace(Py_CHARMASK(c)))
+ if (Py_ISSPACE(Py_CHARMASK(c)))
continue;
if ('0' <= c && c <= '9') {
num = c - '0';
@@ -1249,7 +1249,7 @@ prepare_s(PyStructObject *self)
s = fmt;
size = 0;
while ((c = *s++) != '\0') {
- if (isspace(Py_CHARMASK(c)))
+ if (Py_ISSPACE(Py_CHARMASK(c)))
continue;
if ('0' <= c && c <= '9') {
num = c - '0';
diff --git a/Modules/binascii.c b/Modules/binascii.c
index 19681b4..74db739 100644
--- a/Modules/binascii.c
+++ b/Modules/binascii.c
@@ -1099,7 +1099,7 @@ This function is also available as \"hexlify()\".");
static int
to_int(int c)
{
- if (isdigit(c))
+ if (Py_ISDIGIT(c))
return c - '0';
else {
if (Py_ISUPPER(c))
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 4179c0e..67bff25 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -695,7 +695,7 @@ os2_formatmsg(char *msgbuf, int msglen, char *reason)
if (strlen(msgbuf) > 0) { /* If Non-Empty Msg, Trim CRLF */
char *lastc = &msgbuf[ strlen(msgbuf)-1 ];
- while (lastc > msgbuf && isspace(Py_CHARMASK(*lastc)))
+ while (lastc > msgbuf && Py_ISSPACE(Py_CHARMASK(*lastc)))
*lastc-- = '\0'; /* Trim Trailing Whitespace (CRLF) */
}
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index bc3372f..e027625 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -519,7 +519,7 @@ set_error(void)
/* If non-empty msg, trim CRLF */
char *lastc = &outbuf[ strlen(outbuf)-1 ];
while (lastc > outbuf &&
- isspace(Py_CHARMASK(*lastc))) {
+ Py_ISSPACE(Py_CHARMASK(*lastc))) {
/* Trim trailing whitespace (CRLF) */
*lastc-- = '\0';
}
diff --git a/Objects/longobject.c b/Objects/longobject.c
index 9ca7b65..e2a4ef9 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -1887,7 +1887,7 @@ PyLong_FromString(char *str, char **pend, int base)
"int() arg 2 must be >= 2 and <= 36");
return NULL;
}
- while (*str != '\0' && isspace(Py_CHARMASK(*str)))
+ while (*str != '\0' && Py_ISSPACE(Py_CHARMASK(*str)))
str++;
if (*str == '+')
++str;
@@ -2131,7 +2131,7 @@ digit beyond the first.
goto onError;
if (sign < 0)
Py_SIZE(z) = -(Py_SIZE(z));
- while (*str && isspace(Py_CHARMASK(*str)))
+ while (*str && Py_ISSPACE(Py_CHARMASK(*str)))
str++;
if (*str != '\0')
goto onError;
diff --git a/Objects/stringlib/formatter.h b/Objects/stringlib/formatter.h
index 139b56c..be0d897 100644
--- a/Objects/stringlib/formatter.h
+++ b/Objects/stringlib/formatter.h
@@ -414,7 +414,7 @@ parse_number(STRINGLIB_CHAR *ptr, Py_ssize_t len,
STRINGLIB_CHAR *end = ptr + len;
STRINGLIB_CHAR *remainder;
- while (ptr<end && isdigit(*ptr))
+ while (ptr<end && Py_ISDIGIT(*ptr))
++ptr;
remainder = ptr;
diff --git a/Python/ast.c b/Python/ast.c
index d2f063b..e395c5a 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -3305,7 +3305,7 @@ parsestr(struct compiling *c, const node *n, int *bytesmode)
int quote = Py_CHARMASK(*s);
int rawmode = 0;
int need_encoding;
- if (isalpha(quote)) {
+ if (Py_ISALPHA(quote)) {
if (quote == 'b' || quote == 'B') {
quote = *++s;
*bytesmode = 1;
diff --git a/Python/dynload_aix.c b/Python/dynload_aix.c
index 149990d..b025cd3 100644
--- a/Python/dynload_aix.c
+++ b/Python/dynload_aix.c
@@ -4,7 +4,6 @@
#include "Python.h"
#include "importdl.h"
-#include <ctype.h> /* for isdigit() */
#include <errno.h> /* for global errno */
#include <string.h> /* for strerror() */
#include <stdlib.h> /* for malloc(), free() */
@@ -144,7 +143,7 @@ aix_loaderror(const char *pathname)
if (nerr == load_errtab[j].errNo && load_errtab[j].errstr)
ERRBUF_APPEND(load_errtab[j].errstr);
}
- while (isdigit(Py_CHARMASK(*message[i]))) message[i]++ ;
+ while (Py_ISDIGIT(Py_CHARMASK(*message[i]))) message[i]++ ;
ERRBUF_APPEND(message[i]);
ERRBUF_APPEND("\n");
}
diff --git a/Python/getargs.c b/Python/getargs.c
index a77bb05..d588102 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -288,7 +288,7 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags)
if (level == 0) {
if (c == 'O')
max++;
- else if (isalpha(Py_CHARMASK(c))) {
+ else if (Py_ISALPHA(Py_CHARMASK(c))) {
if (c != 'e') /* skip encoded */
max++;
} else if (c == '|')
@@ -378,7 +378,7 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags)
}
}
- if (*format != '\0' && !isalpha(Py_CHARMASK(*format)) &&
+ if (*format != '\0' && !Py_ISALPHA(Py_CHARMASK(*format)) &&
*format != '(' &&
*format != '|' && *format != ':' && *format != ';') {
PyErr_Format(PyExc_SystemError,
@@ -471,7 +471,7 @@ converttuple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
}
else if (c == ':' || c == ';' || c == '\0')
break;
- else if (level == 0 && isalpha(Py_CHARMASK(c)))
+ else if (level == 0 && Py_ISALPHA(Py_CHARMASK(c)))
n++;
}
diff --git a/Python/mystrtoul.c b/Python/mystrtoul.c
index 52502cb..8a54cbf 100644
--- a/Python/mystrtoul.c
+++ b/Python/mystrtoul.c
@@ -99,7 +99,7 @@ PyOS_strtoul(register char *str, char **ptr, int base)
register int ovlimit; /* required digits to overflow */
/* skip leading white space */
- while (*str && isspace(Py_CHARMASK(*str)))
+ while (*str && Py_ISSPACE(Py_CHARMASK(*str)))
++str;
/* check for leading 0b, 0o or 0x for auto-base or base 16 */
@@ -138,7 +138,7 @@ PyOS_strtoul(register char *str, char **ptr, int base)
/* skip all zeroes... */
while (*str == '0')
++str;
- while (isspace(Py_CHARMASK(*str)))
+ while (Py_ISSPACE(Py_CHARMASK(*str)))
++str;
if (ptr)
*ptr = str;
@@ -266,7 +266,7 @@ PyOS_strtol(char *str, char **ptr, int base)
unsigned long uresult;
char sign;
- while (*str && isspace(Py_CHARMASK(*str)))
+ while (*str && Py_ISSPACE(Py_CHARMASK(*str)))
str++;
sign = *str;