]> granicus.if.org Git - python/commitdiff
Patch #1576166: Support os.utime for directories on Windows NT+.
authorMartin v. Löwis <martin@v.loewis.de>
Sun, 15 Oct 2006 08:43:33 +0000 (08:43 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Sun, 15 Oct 2006 08:43:33 +0000 (08:43 +0000)
Lib/test/test_os.py
Misc/NEWS
Modules/posixmodule.c

index 984484c4c36ec24828c361dd904bb7567dc4c045..065d32707db53284a653fc3dc048e941ef6ea5f7 100644 (file)
@@ -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':
index 1dcd6aad79626b2fadff02f15e2233921a23b803..9f7705ab085bc94928e39c7ed5718587635302e4 100644 (file)
--- 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.
index 93d030017d10f9900ccd66906ba603c9732c027c..9e8bf8f5f07b74be81f260bf18b92855af54a9ac 100644 (file)
@@ -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
 
+