Patch #790000: Allow os.access to handle Unicode file name.
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 @@
         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 @@
 	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