From 1b699a5f00b427d95772349726d1ce1ab92718a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Fri, 12 Sep 2003 16:25:38 +0000 Subject: Patch #790000: Allow os.access to handle Unicode file name. --- Lib/test/test_pep277.py | 1 + Modules/posixmodule.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/Lib/test/test_pep277.py b/Lib/test/test_pep277.py index 744f4aa..b48317f 100644 --- a/Lib/test/test_pep277.py +++ b/Lib/test/test_pep277.py @@ -100,6 +100,7 @@ class UnicodeFileTests(unittest.TestCase): f.write((filename + '\n').encode("utf-8")) f.close() print repr(filename) + os.access(filename,os.R_OK) os.remove(filename) os.chdir(oldwd) os.rmdir(dirname) diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 40526a4..f5b15d9 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1027,6 +1027,22 @@ posix_access(PyObject *self, PyObject *args) int mode; int res; +#ifdef Py_WIN_WIDE_FILENAMES + if (unicode_file_names()) { + PyUnicodeObject *po; + if (PyArg_ParseTuple(args, "Ui:access", &po, &mode)) { + Py_BEGIN_ALLOW_THREADS + /* PyUnicode_AS_UNICODE OK without thread lock as + it is a simple dereference. */ + res = _waccess(PyUnicode_AS_UNICODE(po), mode); + Py_END_ALLOW_THREADS + return(PyBool_FromLong(res == 0)); + } + /* Drop the argument parsing error as narrow strings + are also valid. */ + PyErr_Clear(); + } +#endif if (!PyArg_ParseTuple(args, "si:access", &path, &mode)) return NULL; Py_BEGIN_ALLOW_THREADS -- cgit v0.12