summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_pep277.py1
-rw-r--r--Modules/posixmodule.c16
2 files changed, 17 insertions, 0 deletions
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