[Python-3000-checkins] r56310 - python/branches/py3k-struni/Modules/_fileio.c

thomas.heller python-3000-checkins at python.org
Thu Jul 12 13:03:13 CEST 2007


Author: thomas.heller
Date: Thu Jul 12 13:03:13 2007
New Revision: 56310

Modified:
   python/branches/py3k-struni/Modules/_fileio.c
Log:
First part of sf# 1752225: Support for wide filenames on Windows.
Patch by Amaury Forgeot d'Arc.


Modified: python/branches/py3k-struni/Modules/_fileio.c
==============================================================================
--- python/branches/py3k-struni/Modules/_fileio.c	(original)
+++ python/branches/py3k-struni/Modules/_fileio.c	Thu Jul 12 13:03:13 2007
@@ -118,7 +118,9 @@
 	char *name = NULL;
 	char *mode = "r";
 	char *s;
-	int wideargument = 0;
+#ifdef MS_WINDOWS
+	Py_UNICODE *widename = NULL;
+#endif
 	int ret = 0;
 	int rwa = 0, plus = 0, append = 0;
 	int flags = 0;
@@ -151,20 +153,16 @@
 		PyObject *po;
 		if (PyArg_ParseTupleAndKeywords(args, kwds, "U|s:fileio",
 						kwlist, &po, &mode)) {
-			wideargument = 1;
+			widename = PyUnicode_AS_UNICODE(po);
 		} else {
 			/* Drop the argument parsing error as narrow
 			   strings are also valid. */
 			PyErr_Clear();
 		}
-
-		PyErr_SetString(PyExc_NotImplementedError,
-			"Windows wide filenames are not yet supported");
-		goto error;
 	    }
+	    if (widename == NULL) 
 #endif
-
-	    if (!wideargument) {
+	    {
 		if (!PyArg_ParseTupleAndKeywords(args, kwds, "et|s:fileio",
 						 kwlist,
 						 Py_FileSystemDefaultEncoding,
@@ -174,7 +172,7 @@
 	}
 
 	self->readable = self->writable = 0;
-        self->seekable = -1;
+	self->seekable = -1;
 	s = mode;
 	while (*s) {
 		switch (*s++) {
@@ -241,6 +239,11 @@
 	else {
 		Py_BEGIN_ALLOW_THREADS
 		errno = 0;
+#ifdef MS_WINDOWS
+		if (widename != NULL)
+		self->fd = _wopen(widename, flags, 0666);
+		else
+#endif
 		self->fd = open(name, flags, 0666);
 		Py_END_ALLOW_THREADS
 		if (self->fd < 0 || dircheck(self) < 0) {


More information about the Python-3000-checkins mailing list