From 18aaa568fd98ec6adcd58f65ffb1a9f6943cfe53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Sun, 15 Oct 2006 08:43:33 +0000 Subject: Patch #1576166: Support os.utime for directories on Windows NT+. --- Lib/test/test_os.py | 7 +++++++ Misc/NEWS | 2 ++ 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': diff --git a/Misc/NEWS b/Misc/NEWS index 1dcd6aa..9f7705a 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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 + -- cgit v0.12