[Python-checkins] r73604 - in python/branches/py3k: Misc/NEWS Modules/_io/fileio.c Modules/posixmodule.c PC/pyconfig.h

hirokazu.yamamoto python-checkins at python.org
Sun Jun 28 13:07:03 CEST 2009


Author: hirokazu.yamamoto
Date: Sun Jun 28 13:07:03 2009
New Revision: 73604

Log:
Merged revisions 73603 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r73603 | hirokazu.yamamoto | 2009-06-28 19:23:00 +0900 | 1 line
  
  Issue #4856: Remove checks for win NT.
........


Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Misc/NEWS
   python/branches/py3k/Modules/_io/fileio.c
   python/branches/py3k/Modules/posixmodule.c
   python/branches/py3k/PC/pyconfig.h

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Sun Jun 28 13:07:03 2009
@@ -12,6 +12,8 @@
 Core and Builtins
 -----------------
 
+- Issue #4856: Remove checks for win NT.
+
 Library
 -------
 

Modified: python/branches/py3k/Modules/_io/fileio.c
==============================================================================
--- python/branches/py3k/Modules/_io/fileio.c	(original)
+++ python/branches/py3k/Modules/_io/fileio.c	Sun Jun 28 13:07:03 2009
@@ -224,11 +224,8 @@
 	}
 
 #ifdef MS_WINDOWS
-	if (GetVersion() < 0x80000000) {
-		/* On NT, so wide API available */
-		if (PyUnicode_Check(nameobj))
-			widename = PyUnicode_AS_UNICODE(nameobj);
-	}
+	if (PyUnicode_Check(nameobj))
+		widename = PyUnicode_AS_UNICODE(nameobj);
 	if (widename == NULL)
 #endif
 	if (fd < 0)

Modified: python/branches/py3k/Modules/posixmodule.c
==============================================================================
--- python/branches/py3k/Modules/posixmodule.c	(original)
+++ python/branches/py3k/Modules/posixmodule.c	Sun Jun 28 13:07:03 2009
@@ -759,20 +759,6 @@
 	return Py_None;
 }
 
-#ifdef MS_WINDOWS
-static int
-unicode_file_names(void)
-{
-	static int canusewide = -1;
-	if (canusewide == -1) {
-		/* As per doc for ::GetVersion(), this is the correct test for
-		   the Windows NT family. */
-		canusewide = (GetVersion() < 0x80000000) ? 1 : 0;
-	}
-	return canusewide;
-}
-#endif
-
 static PyObject *
 posix_1str(PyObject *args, char *format, int (*func)(const char*))
 {
@@ -829,18 +815,17 @@
 	PyObject *uni;
 	char *ansi;
 	BOOL result;
-	if (unicode_file_names()) {
-		if (!PyArg_ParseTuple(args, wformat, &uni))
-			PyErr_Clear();
-		else {
-			Py_BEGIN_ALLOW_THREADS
-			result = funcW(PyUnicode_AsUnicode(uni));
-			Py_END_ALLOW_THREADS
-			if (!result)
-				return win32_error_unicode(func, PyUnicode_AsUnicode(uni));
-			Py_INCREF(Py_None);
-			return Py_None;
-		}
+
+	if (!PyArg_ParseTuple(args, wformat, &uni))
+		PyErr_Clear();
+	else {
+		Py_BEGIN_ALLOW_THREADS
+		result = funcW(PyUnicode_AsUnicode(uni));
+		Py_END_ALLOW_THREADS
+		if (!result)
+			return win32_error_unicode(func, PyUnicode_AsUnicode(uni));
+		Py_INCREF(Py_None);
+		return Py_None;
 	}
 	if (!PyArg_ParseTuple(args, format, &ansi))
 		return NULL;
@@ -1003,22 +988,6 @@
 	return 0;
 }
 
-/* Emulate GetFileAttributesEx[AW] on Windows 95 */
-static int checked = 0;
-static BOOL (CALLBACK *gfaxa)(LPCSTR, GET_FILEEX_INFO_LEVELS, LPVOID);
-static BOOL (CALLBACK *gfaxw)(LPCWSTR, GET_FILEEX_INFO_LEVELS, LPVOID);
-static void
-check_gfax()
-{
-	HINSTANCE hKernel32;
-	if (checked)
-	    return;
-	checked = 1;
-	hKernel32 = GetModuleHandle("KERNEL32");
-	*(FARPROC*)&gfaxa = GetProcAddress(hKernel32, "GetFileAttributesExA");
-	*(FARPROC*)&gfaxw = GetProcAddress(hKernel32, "GetFileAttributesExW");
-}
-
 static BOOL
 attributes_from_dir(LPCSTR pszFile, LPWIN32_FILE_ATTRIBUTE_DATA pfad)
 {
@@ -1065,12 +1034,9 @@
 	/* First try to use the system's implementation, if that is
 	   available and either succeeds to gives an error other than
 	   that it isn't implemented. */
-	check_gfax();
-	if (gfaxa) {
-		result = gfaxa(pszFile, level, pv);
-		if (result || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
-			return result;
-	}
+	result = GetFileAttributesExA(pszFile, level, pv);
+	if (result || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+		return result;
 	/* It's either not present, or not implemented.
 	   Emulate using FindFirstFile. */
 	if (level != GetFileExInfoStandard) {
@@ -1095,12 +1061,9 @@
 	/* First try to use the system's implementation, if that is
 	   available and either succeeds to gives an error other than
 	   that it isn't implemented. */
-	check_gfax();
-	if (gfaxa) {
-		result = gfaxw(pszFile, level, pv);
-		if (result || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
-			return result;
-	}
+	result = GetFileAttributesExW(pszFile, level, pv);
+	if (result || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+		return result;
 	/* It's either not present, or not implemented.
 	   Emulate using FindFirstFile. */
 	if (level != GetFileExInfoStandard) {
@@ -1618,27 +1581,23 @@
 	PyObject *result;
 
 #ifdef MS_WINDOWS
-	/* If on wide-character-capable OS see if argument
-	   is Unicode and if so use wide API.  */
-	if (unicode_file_names()) {
-		PyUnicodeObject *po;
-		if (PyArg_ParseTuple(args, wformat, &po)) {
-			Py_UNICODE *wpath = PyUnicode_AS_UNICODE(po);
+	PyUnicodeObject *po;
+	if (PyArg_ParseTuple(args, wformat, &po)) {
+		Py_UNICODE *wpath = PyUnicode_AS_UNICODE(po);
 
-			Py_BEGIN_ALLOW_THREADS
-				/* PyUnicode_AS_UNICODE result OK without
-				   thread lock as it is a simple dereference. */
-			res = wstatfunc(wpath, &st);
-			Py_END_ALLOW_THREADS
+		Py_BEGIN_ALLOW_THREADS
+			/* PyUnicode_AS_UNICODE result OK without
+			   thread lock as it is a simple dereference. */
+		res = wstatfunc(wpath, &st);
+		Py_END_ALLOW_THREADS
 
-			if (res != 0)
-				return win32_error_unicode("stat", wpath);
-			return _pystat_fromstructstat(&st);
-		}
-		/* Drop the argument parsing error as narrow strings
-		   are also valid. */
-		PyErr_Clear();
-	}
+		if (res != 0)
+			return win32_error_unicode("stat", wpath);
+		return _pystat_fromstructstat(&st);
+	}
+	/* Drop the argument parsing error as narrow strings
+	   are also valid. */
+	PyErr_Clear();
 #endif
 
 	if (!PyArg_ParseTuple(args, format,
@@ -1682,23 +1641,21 @@
 	
 #ifdef MS_WINDOWS
 	DWORD attr;
-	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. */
-			attr = GetFileAttributesW(PyUnicode_AS_UNICODE(po));
-			Py_END_ALLOW_THREADS
-			goto finish;
-		}
-		/* Drop the argument parsing error as narrow strings
-		   are also valid. */
-		PyErr_Clear();
+	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. */
+		attr = GetFileAttributesW(PyUnicode_AS_UNICODE(po));
+		Py_END_ALLOW_THREADS
+		goto finish;
 	}
+	/* Drop the argument parsing error as narrow strings
+	   are also valid. */
+	PyErr_Clear();
 	if (!PyArg_ParseTuple(args, "O&i:access",
 			      PyUnicode_FSConverter, &opath, &mode))
-		return 0;
+		return NULL;
 	path = bytes2str(opath, 1);
 	Py_BEGIN_ALLOW_THREADS
 	attr = GetFileAttributesA(path);
@@ -1839,31 +1796,30 @@
 	int res;
 #ifdef MS_WINDOWS
 	DWORD attr;
-	if (unicode_file_names()) {
-		PyUnicodeObject *po;
-		if (PyArg_ParseTuple(args, "Ui|:chmod", &po, &i)) {
-			Py_BEGIN_ALLOW_THREADS
-			attr = GetFileAttributesW(PyUnicode_AS_UNICODE(po));
-			if (attr != 0xFFFFFFFF) {
-				if (i & _S_IWRITE)
-					attr &= ~FILE_ATTRIBUTE_READONLY;
-				else
-					attr |= FILE_ATTRIBUTE_READONLY;
-				res = SetFileAttributesW(PyUnicode_AS_UNICODE(po), attr);
-			}
+	PyUnicodeObject *po;
+	if (PyArg_ParseTuple(args, "Ui|:chmod", &po, &i)) {
+		Py_BEGIN_ALLOW_THREADS
+		attr = GetFileAttributesW(PyUnicode_AS_UNICODE(po));
+		if (attr != 0xFFFFFFFF) {
+			if (i & _S_IWRITE)
+				attr &= ~FILE_ATTRIBUTE_READONLY;
 			else
-				res = 0;
-			Py_END_ALLOW_THREADS
-			if (!res)
-				return win32_error_unicode("chmod",
-						PyUnicode_AS_UNICODE(po));
-			Py_INCREF(Py_None);
-			return Py_None;
+				attr |= FILE_ATTRIBUTE_READONLY;
+			res = SetFileAttributesW(PyUnicode_AS_UNICODE(po), attr);
 		}
-		/* Drop the argument parsing error as narrow strings
-		   are also valid. */
-		PyErr_Clear();
+		else
+			res = 0;
+		Py_END_ALLOW_THREADS
+		if (!res)
+			return win32_error_unicode("chmod",
+					PyUnicode_AS_UNICODE(po));
+		Py_INCREF(Py_None);
+		return Py_None;
 	}
+	/* Drop the argument parsing error as narrow strings
+	   are also valid. */
+	PyErr_Clear();
+
 	if (!PyArg_ParseTuple(args, "O&i:chmod", PyUnicode_FSConverter,
 	                      &opath, &i))
 		return NULL;
@@ -2139,7 +2095,7 @@
 	char *res;
 
 #ifdef MS_WINDOWS
-	if (!use_bytes && unicode_file_names()) {
+	if (!use_bytes) {
 		wchar_t wbuf[1026];
 		wchar_t *wbuf2 = wbuf;
 		PyObject *resobj;
@@ -2243,88 +2199,84 @@
 	char *bufptr = namebuf;
 	Py_ssize_t len = sizeof(namebuf)-5; /* only claim to have space for MAX_PATH */
 
-	/* If on wide-character-capable OS see if argument
-	   is Unicode and if so use wide API.  */
-	if (unicode_file_names()) {
-		PyObject *po;
-		if (PyArg_ParseTuple(args, "U:listdir", &po)) {
-			WIN32_FIND_DATAW wFileData;
-			Py_UNICODE *wnamebuf;
-			/* Overallocate for \\*.*\0 */
-			len = PyUnicode_GET_SIZE(po);
-			wnamebuf = malloc((len + 5) * sizeof(wchar_t));
-			if (!wnamebuf) {
-				PyErr_NoMemory();
-				return NULL;
-			}
-			wcscpy(wnamebuf, PyUnicode_AS_UNICODE(po));
-			if (len > 0) {
-				Py_UNICODE wch = wnamebuf[len-1];
-				if (wch != L'/' && wch != L'\\' && wch != L':')
-					wnamebuf[len++] = L'\\';
-				wcscpy(wnamebuf + len, L"*.*");
-			}
-			if ((d = PyList_New(0)) == NULL) {
+	PyObject *po;
+	if (PyArg_ParseTuple(args, "U:listdir", &po)) {
+		WIN32_FIND_DATAW wFileData;
+		Py_UNICODE *wnamebuf;
+		/* Overallocate for \\*.*\0 */
+		len = PyUnicode_GET_SIZE(po);
+		wnamebuf = malloc((len + 5) * sizeof(wchar_t));
+		if (!wnamebuf) {
+			PyErr_NoMemory();
+			return NULL;
+		}
+		wcscpy(wnamebuf, PyUnicode_AS_UNICODE(po));
+		if (len > 0) {
+			Py_UNICODE wch = wnamebuf[len-1];
+			if (wch != L'/' && wch != L'\\' && wch != L':')
+				wnamebuf[len++] = L'\\';
+			wcscpy(wnamebuf + len, L"*.*");
+		}
+		if ((d = PyList_New(0)) == NULL) {
+			free(wnamebuf);
+			return NULL;
+		}
+		hFindFile = FindFirstFileW(wnamebuf, &wFileData);
+		if (hFindFile == INVALID_HANDLE_VALUE) {
+			int error = GetLastError();
+			if (error == ERROR_FILE_NOT_FOUND) {
 				free(wnamebuf);
-				return NULL;
+				return d;
 			}
-			hFindFile = FindFirstFileW(wnamebuf, &wFileData);
-			if (hFindFile == INVALID_HANDLE_VALUE) {
-				int error = GetLastError();
-				if (error == ERROR_FILE_NOT_FOUND) {
-					free(wnamebuf);
-					return d;
+			Py_DECREF(d);
+			win32_error_unicode("FindFirstFileW", wnamebuf);
+			free(wnamebuf);
+			return NULL;
+		}
+		do {
+			/* Skip over . and .. */
+			if (wcscmp(wFileData.cFileName, L".") != 0 &&
+			    wcscmp(wFileData.cFileName, L"..") != 0) {
+				v = PyUnicode_FromUnicode(wFileData.cFileName, wcslen(wFileData.cFileName));
+				if (v == NULL) {
+					Py_DECREF(d);
+					d = NULL;
+					break;
 				}
-				Py_DECREF(d);
-				win32_error_unicode("FindFirstFileW", wnamebuf);
-				free(wnamebuf);
-				return NULL;
-			}
-			do {
-				/* Skip over . and .. */
-				if (wcscmp(wFileData.cFileName, L".") != 0 &&
-				    wcscmp(wFileData.cFileName, L"..") != 0) {
-					v = PyUnicode_FromUnicode(wFileData.cFileName, wcslen(wFileData.cFileName));
-					if (v == NULL) {
-						Py_DECREF(d);
-						d = NULL;
-						break;
-					}
-					if (PyList_Append(d, v) != 0) {
-						Py_DECREF(v);
-						Py_DECREF(d);
-						d = NULL;
-						break;
-					}
+				if (PyList_Append(d, v) != 0) {
 					Py_DECREF(v);
+					Py_DECREF(d);
+					d = NULL;
+					break;
 				}
-				Py_BEGIN_ALLOW_THREADS
-				result = FindNextFileW(hFindFile, &wFileData);
-				Py_END_ALLOW_THREADS
-				/* FindNextFile sets error to ERROR_NO_MORE_FILES if
-				   it got to the end of the directory. */
-				if (!result && GetLastError() != ERROR_NO_MORE_FILES) {
-				    Py_DECREF(d);
-				    win32_error_unicode("FindNextFileW", wnamebuf);
-				    FindClose(hFindFile);
-				    free(wnamebuf);
-				    return NULL;
-				}
-			} while (result == TRUE);
-
-			if (FindClose(hFindFile) == FALSE) {
-				Py_DECREF(d);
-				win32_error_unicode("FindClose", wnamebuf);
-				free(wnamebuf);
-				return NULL;
+				Py_DECREF(v);
+			}
+			Py_BEGIN_ALLOW_THREADS
+			result = FindNextFileW(hFindFile, &wFileData);
+			Py_END_ALLOW_THREADS
+			/* FindNextFile sets error to ERROR_NO_MORE_FILES if
+			   it got to the end of the directory. */
+			if (!result && GetLastError() != ERROR_NO_MORE_FILES) {
+			    Py_DECREF(d);
+			    win32_error_unicode("FindNextFileW", wnamebuf);
+			    FindClose(hFindFile);
+			    free(wnamebuf);
+			    return NULL;
 			}
+		} while (result == TRUE);
+
+		if (FindClose(hFindFile) == FALSE) {
+			Py_DECREF(d);
+			win32_error_unicode("FindClose", wnamebuf);
 			free(wnamebuf);
-			return d;
+			return NULL;
 		}
-		/* Drop the argument parsing error as narrow strings
-		   are also valid. */
-		PyErr_Clear();
+		free(wnamebuf);
+		return d;
 	}
+	/* Drop the argument parsing error as narrow strings
+	   are also valid. */
+	PyErr_Clear();
 
 	if (!PyArg_ParseTuple(args, "O&:listdir",
 	                      PyUnicode_FSConverter, &opath))
@@ -2562,35 +2514,34 @@
 	char outbuf[MAX_PATH*2];
 	char *temp;
 #ifdef MS_WINDOWS
-	if (unicode_file_names()) {
-		PyUnicodeObject *po;
-		if (PyArg_ParseTuple(args, "U|:_getfullpathname", &po)) {
-			Py_UNICODE *wpath = PyUnicode_AS_UNICODE(po);
-			Py_UNICODE woutbuf[MAX_PATH*2], *woutbufp = woutbuf;
-			Py_UNICODE *wtemp;
-			DWORD result;
-			PyObject *v;
-			result = GetFullPathNameW(wpath,
-						   sizeof(woutbuf)/sizeof(woutbuf[0]),
-						    woutbuf, &wtemp);
-			if (result > sizeof(woutbuf)/sizeof(woutbuf[0])) {
-				woutbufp = malloc(result * sizeof(Py_UNICODE));
-				if (!woutbufp)
-					return PyErr_NoMemory();
-				result = GetFullPathNameW(wpath, result, woutbufp, &wtemp);
-			}
-			if (result)
-				v = PyUnicode_FromUnicode(woutbufp, wcslen(woutbufp));
-			else
-				v = win32_error_unicode("GetFullPathNameW", wpath);
-			if (woutbufp != woutbuf)
-				free(woutbufp);
-			return v;
+	PyUnicodeObject *po;
+	if (PyArg_ParseTuple(args, "U|:_getfullpathname", &po)) {
+		Py_UNICODE *wpath = PyUnicode_AS_UNICODE(po);
+		Py_UNICODE woutbuf[MAX_PATH*2], *woutbufp = woutbuf;
+		Py_UNICODE *wtemp;
+		DWORD result;
+		PyObject *v;
+		result = GetFullPathNameW(wpath,
+					   sizeof(woutbuf)/sizeof(woutbuf[0]),
+					    woutbuf, &wtemp);
+		if (result > sizeof(woutbuf)/sizeof(woutbuf[0])) {
+			woutbufp = malloc(result * sizeof(Py_UNICODE));
+			if (!woutbufp)
+				return PyErr_NoMemory();
+			result = GetFullPathNameW(wpath, result, woutbufp, &wtemp);
 		}
-		/* Drop the argument parsing error as narrow strings
-		   are also valid. */
-		PyErr_Clear();
-	}
+		if (result)
+			v = PyUnicode_FromUnicode(woutbufp, wcslen(woutbufp));
+		else
+			v = win32_error_unicode("GetFullPathNameW", wpath);
+		if (woutbufp != woutbuf)
+			free(woutbufp);
+		return v;
+	}
+	/* Drop the argument parsing error as narrow strings
+	   are also valid. */
+	PyErr_Clear();
+
 #endif
 	if (!PyArg_ParseTuple (args, "O&:_getfullpathname",
 	                       PyUnicode_FSConverter, &opath))
@@ -2624,23 +2575,21 @@
 	int mode = 0777;
 
 #ifdef MS_WINDOWS
-	if (unicode_file_names()) {
-		PyUnicodeObject *po;
-		if (PyArg_ParseTuple(args, "U|i:mkdir", &po, &mode)) {
-			Py_BEGIN_ALLOW_THREADS
-			/* PyUnicode_AS_UNICODE OK without thread lock as
-			   it is a simple dereference. */
-			res = CreateDirectoryW(PyUnicode_AS_UNICODE(po), NULL);
-			Py_END_ALLOW_THREADS
-			if (!res)
-				return win32_error_unicode("mkdir", PyUnicode_AS_UNICODE(po));
-			Py_INCREF(Py_None);
-			return Py_None;
-		}
-		/* Drop the argument parsing error as narrow strings
-		   are also valid. */
-		PyErr_Clear();
+	PyUnicodeObject *po;
+	if (PyArg_ParseTuple(args, "U|i:mkdir", &po, &mode)) {
+		Py_BEGIN_ALLOW_THREADS
+		/* PyUnicode_AS_UNICODE OK without thread lock as
+		   it is a simple dereference. */
+		res = CreateDirectoryW(PyUnicode_AS_UNICODE(po), NULL);
+		Py_END_ALLOW_THREADS
+		if (!res)
+			return win32_error_unicode("mkdir", PyUnicode_AS_UNICODE(po));
+		Py_INCREF(Py_None);
+		return Py_None;
 	}
+	/* Drop the argument parsing error as narrow strings
+	   are also valid. */
+	PyErr_Clear();
 	if (!PyArg_ParseTuple(args, "O&|i:mkdir",
 	                      PyUnicode_FSConverter, &opath, &mode))
 		return NULL;
@@ -2733,28 +2682,26 @@
 	PyObject *o1, *o2;
 	char *p1, *p2;
 	BOOL result;
-	if (unicode_file_names()) {
-	    if (!PyArg_ParseTuple(args, "OO:rename", &o1, &o2))
+	if (!PyArg_ParseTuple(args, "OO:rename", &o1, &o2))
 		goto error;
-	    if (!convert_to_unicode(&o1))
+	if (!convert_to_unicode(&o1))
 		goto error;
-	    if (!convert_to_unicode(&o2)) {
+	if (!convert_to_unicode(&o2)) {
 		Py_DECREF(o1);
 		goto error;
-	    }
-	    Py_BEGIN_ALLOW_THREADS
-	    result = MoveFileW(PyUnicode_AsUnicode(o1),
-			       PyUnicode_AsUnicode(o2));
-	    Py_END_ALLOW_THREADS
-	    Py_DECREF(o1);
-	    Py_DECREF(o2);
-	    if (!result)
-		    return win32_error("rename", NULL);
-	    Py_INCREF(Py_None);
-	    return Py_None;
-error:
-	    PyErr_Clear();
 	}
+	Py_BEGIN_ALLOW_THREADS
+	result = MoveFileW(PyUnicode_AsUnicode(o1),
+			   PyUnicode_AsUnicode(o2));
+	Py_END_ALLOW_THREADS
+	Py_DECREF(o1);
+	Py_DECREF(o2);
+	if (!result)
+		return win32_error("rename", NULL);
+	Py_INCREF(Py_None);
+	return Py_None;
+error:
+	PyErr_Clear();
 	if (!PyArg_ParseTuple(args, "ss:rename", &p1, &p2))
 		return NULL;
 	Py_BEGIN_ALLOW_THREADS
@@ -2940,21 +2887,20 @@
 	FILETIME atime, mtime;
 	PyObject *result = NULL;
 
-	if (unicode_file_names()) {
-		if (PyArg_ParseTuple(args, "UO|:utime", &obwpath, &arg)) {
-			wpath = PyUnicode_AS_UNICODE(obwpath);
-			Py_BEGIN_ALLOW_THREADS
-			hFile = CreateFileW(wpath, FILE_WRITE_ATTRIBUTES, 0,
-					    NULL, OPEN_EXISTING,
-					    FILE_FLAG_BACKUP_SEMANTICS, NULL);
-			Py_END_ALLOW_THREADS
-			if (hFile == INVALID_HANDLE_VALUE)
-				return win32_error_unicode("utime", wpath);
-		} else
-			/* Drop the argument parsing error as narrow strings
-			   are also valid. */
-			PyErr_Clear();
-	}
+	if (PyArg_ParseTuple(args, "UO|:utime", &obwpath, &arg)) {
+		wpath = PyUnicode_AS_UNICODE(obwpath);
+		Py_BEGIN_ALLOW_THREADS
+		hFile = CreateFileW(wpath, FILE_WRITE_ATTRIBUTES, 0,
+				    NULL, OPEN_EXISTING,
+				    FILE_FLAG_BACKUP_SEMANTICS, NULL);
+		Py_END_ALLOW_THREADS
+		if (hFile == INVALID_HANDLE_VALUE)
+			return win32_error_unicode("utime", wpath);
+	} else
+		/* Drop the argument parsing error as narrow strings
+		   are also valid. */
+		PyErr_Clear();
+
 	if (!wpath) {
 		if (!PyArg_ParseTuple(args, "O&O:utime",
 				PyUnicode_FSConverter, &oapath, &arg))
@@ -4927,22 +4873,20 @@
 	int fd;
 
 #ifdef MS_WINDOWS
-	if (unicode_file_names()) {
-		PyUnicodeObject *po;
-		if (PyArg_ParseTuple(args, "Ui|i:mkdir", &po, &flag, &mode)) {
-			Py_BEGIN_ALLOW_THREADS
-			/* PyUnicode_AS_UNICODE OK without thread
-			   lock as it is a simple dereference. */
-			fd = _wopen(PyUnicode_AS_UNICODE(po), flag, mode);
-			Py_END_ALLOW_THREADS
-			if (fd < 0)
-				return posix_error();
-			return PyLong_FromLong((long)fd);
-		}
-		/* Drop the argument parsing error as narrow strings
-		   are also valid. */
-		PyErr_Clear();
-	}
+	PyUnicodeObject *po;
+	if (PyArg_ParseTuple(args, "Ui|i:mkdir", &po, &flag, &mode)) {
+		Py_BEGIN_ALLOW_THREADS
+		/* PyUnicode_AS_UNICODE OK without thread
+		   lock as it is a simple dereference. */
+		fd = _wopen(PyUnicode_AS_UNICODE(po), flag, mode);
+		Py_END_ALLOW_THREADS
+		if (fd < 0)
+			return posix_error();
+		return PyLong_FromLong((long)fd);
+	}
+	/* Drop the argument parsing error as narrow strings
+	   are also valid. */
+	PyErr_Clear();
 #endif
 
 	if (!PyArg_ParseTuple(args, "O&i|i",
@@ -6816,40 +6760,37 @@
 	char *operation = NULL;
 	HINSTANCE rc;
 
-	if (unicode_file_names()) {
-		PyObject *unipath, *woperation = NULL;
-		if (!PyArg_ParseTuple(args, "U|s:startfile",
-				      &unipath, &operation)) {
+	PyObject *unipath, *woperation = NULL;
+	if (!PyArg_ParseTuple(args, "U|s:startfile",
+			      &unipath, &operation)) {
+		PyErr_Clear();
+		goto normal;
+	}
+
+	if (operation) {
+		woperation = PyUnicode_DecodeASCII(operation, 
+						   strlen(operation), NULL);
+		if (!woperation) {
 			PyErr_Clear();
+			operation = NULL;
 			goto normal;
 		}
+	}
 		
+	Py_BEGIN_ALLOW_THREADS
+	rc = ShellExecuteW((HWND)0, woperation ? PyUnicode_AS_UNICODE(woperation) : 0,
+		PyUnicode_AS_UNICODE(unipath),
+		NULL, NULL, SW_SHOWNORMAL);
+	Py_END_ALLOW_THREADS
 
-		if (operation) {
-		    woperation = PyUnicode_DecodeASCII(operation, 
-						       strlen(operation), NULL);
-		    if (!woperation) {
-			    PyErr_Clear();
-			    operation = NULL;
-			    goto normal;
-		    }
-		}
-			
-		Py_BEGIN_ALLOW_THREADS
-		rc = ShellExecuteW((HWND)0, woperation ? PyUnicode_AS_UNICODE(woperation) : 0,
-			PyUnicode_AS_UNICODE(unipath),
-			NULL, NULL, SW_SHOWNORMAL);
-		Py_END_ALLOW_THREADS
-
-		Py_XDECREF(woperation);
-		if (rc <= (HINSTANCE)32) {
-			PyObject *errval = win32_error_unicode("startfile",
-						PyUnicode_AS_UNICODE(unipath));
-			return errval;
-		}
-		Py_INCREF(Py_None);
-		return Py_None;
+	Py_XDECREF(woperation);
+	if (rc <= (HINSTANCE)32) {
+		PyObject *errval = win32_error_unicode("startfile",
+					PyUnicode_AS_UNICODE(unipath));
+		return errval;
 	}
+	Py_INCREF(Py_None);
+	return Py_None;
 
 normal:
 	if (!PyArg_ParseTuple(args, "O&|s:startfile", 

Modified: python/branches/py3k/PC/pyconfig.h
==============================================================================
--- python/branches/py3k/PC/pyconfig.h	(original)
+++ python/branches/py3k/PC/pyconfig.h	Sun Jun 28 13:07:03 2009
@@ -95,12 +95,6 @@
 #endif
 
 #ifdef MS_WINCE
-/* Python uses GetVersion() to distinguish between
- * Windows NT and 9x/ME where OS Unicode support is concerned.
- * Windows CE supports Unicode in the same way as NT so we
- * define the missing GetVersion() accordingly.
- */
-#define GetVersion() (4)
 /* Windows CE does not support environment variables */
 #define getenv(v) (NULL)
 #define environ (NULL)


More information about the Python-checkins mailing list