Mercurial > cpython-lru_cache-weakref
diff Python/import.c @ 47599:e2eb70235392
Issue 1342: Python could not start if installed in a directory
with non-ascii characters.
This is the simple fix, which uses the FileSystemEncoding.
Replacing all the char* with unicode strings is a major rewrite,
and needs more thinking.
| author | Amaury Forgeot d'Arc <amauryfa@gmail.com> |
|---|---|
| date | Wed, 11 Jun 2008 17:40:47 +0000 |
| parents | 212a1fee6bf9 |
| children | de0bf60f1245 |
line wrap: on
line diff
--- a/Python/import.c Wed Jun 11 16:57:54 2008 +0000 +++ b/Python/import.c Wed Jun 11 17:40:47 2008 +0000 @@ -1364,19 +1364,26 @@ if (!v) return NULL; if (PyUnicode_Check(v)) { - v = _PyUnicode_AsDefaultEncodedString(v, NULL); + v = PyUnicode_AsEncodedString(v, + Py_FileSystemDefaultEncoding, NULL); if (v == NULL) return NULL; } - if (!PyBytes_Check(v)) + else if (!PyBytes_Check(v)) continue; + else + Py_INCREF(v); + base = PyBytes_AS_STRING(v); size = PyBytes_GET_SIZE(v); len = size; if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) { + Py_DECREF(v); continue; /* Too long */ } strcpy(buf, base); + Py_DECREF(v); + if (strlen(buf) != len) { continue; /* v contains '\0' */ } @@ -3155,8 +3162,8 @@ if (!_PyArg_NoKeywords("NullImporter()", kwds)) return -1; - if (!PyArg_ParseTuple(args, "s:NullImporter", - &path)) + if (!PyArg_ParseTuple(args, "es:NullImporter", + Py_FileSystemDefaultEncoding, &path)) return -1; pathlen = strlen(path);
