diff options
-rw-r--r-- | Misc/NEWS | 9 | ||||
-rw-r--r-- | Modules/posixmodule.c | 24 |
2 files changed, 32 insertions, 1 deletions
@@ -25,7 +25,11 @@ Extension modules Library ------- -TBD +- os.listdir() now returns Unicode strings on platforms that set + Py_FileSystemDefaultEncoding, for file names that are not representable + in ASCII. (This currently only affects MacOS X; on Windows versions + with wide file name support os.listdir() already returned Unicode + strings.) Tools/Demos ----------- @@ -61,6 +65,9 @@ TBD Mac --- +- os.listdir() now may return Unicode strings on MacOS X. See the general + news item under "Library". + - A new method MacOS.WMAvailable() returns true if it is safe to access the window manager, false otherwise. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index d203378..482bba9 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1795,6 +1795,30 @@ posix_listdir(PyObject *self, PyObject *args) d = NULL; break; } +#ifdef Py_USING_UNICODE + if (Py_FileSystemDefaultEncoding != NULL) { + PyObject *w; + + w = PyUnicode_FromEncodedObject(v, + Py_FileSystemDefaultEncoding, + "strict"); + Py_DECREF(v); + v = w; + if (v == NULL) { + Py_DECREF(d); + d = NULL; + break; + } + /* attempt to convert to ASCII */ + w = PyUnicode_AsASCIIString(v); + if (w != NULL) { + Py_DECREF(v); + v = w; + } + else + PyErr_Clear(); + } +#endif if (PyList_Append(d, v) != 0) { Py_DECREF(v); Py_DECREF(d); |