From 46c9784f68a8dbb4f13fa86ac780c45a4363b8a8 Mon Sep 17 00:00:00 2001 From: Just van Rossum Date: Tue, 25 Feb 2003 21:42:15 +0000 Subject: [PATCH] Patch #683592: unicode support for os.listdir() os.listdir() may now return unicode strings on platforms that set Py_FileSystemDefaultEncoding. --- Misc/NEWS | 9 ++++++++- Modules/posixmodule.c | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Misc/NEWS b/Misc/NEWS index fa7ef5ee73..750b2c3667 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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 d203378d3d..482bba95cb 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); -- 2.40.0