diff options
-rw-r--r-- | Lib/test/test_os.py | 7 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Modules/posixmodule.c | 7 |
3 files changed, 14 insertions, 2 deletions
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 984484c..065d327 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -223,6 +223,13 @@ class StatAttributeTests(unittest.TestCase): except TypeError: pass + def test_utime_dir(self): + delta = 1000000 + st = os.stat(test_support.TESTFN) + os.utime(test_support.TESTFN, (st.st_atime, st.st_mtime-delta)) + st2 = os.stat(test_support.TESTFN) + self.assertEquals(st2.st_mtime, st.st_mtime-delta) + # Restrict test to Win32, since there is no guarantee other # systems support centiseconds if sys.platform == 'win32': @@ -137,6 +137,8 @@ Library Extension Modules ----------------- +- Patch #1576166: Support os.utime for directories on Windows NT+. + - Bug #1548891: The cStringIO.StringIO() constructor now encodes unicode arguments with the system default encoding just like the write() method does, instead of converting it to a raw buffer. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 93d0300..9e8bf8f 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2458,7 +2458,8 @@ posix_utime(PyObject *self, PyObject *args) wpath = PyUnicode_AS_UNICODE(obwpath); Py_BEGIN_ALLOW_THREADS hFile = CreateFileW(wpath, FILE_WRITE_ATTRIBUTES, 0, - NULL, OPEN_EXISTING, 0, NULL); + NULL, OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, NULL); Py_END_ALLOW_THREADS if (hFile == INVALID_HANDLE_VALUE) return win32_error_unicode("utime", wpath); @@ -2473,7 +2474,8 @@ posix_utime(PyObject *self, PyObject *args) return NULL; Py_BEGIN_ALLOW_THREADS hFile = CreateFileA(apath, FILE_WRITE_ATTRIBUTES, 0, - NULL, OPEN_EXISTING, 0, NULL); + NULL, OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, NULL); Py_END_ALLOW_THREADS if (hFile == INVALID_HANDLE_VALUE) { win32_error("utime", apath); @@ -8617,3 +8619,4 @@ INITFUNC(void) } #endif + |