summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2006-10-15 08:43:33 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2006-10-15 08:43:33 (GMT)
commit18aaa568fd98ec6adcd58f65ffb1a9f6943cfe53 (patch)
treeebc8b8042c9c0f99937ff8de5231a6a1fb91cffe
parentc9e82f62342b86583f0dd9f17e55da8a9d9a30e0 (diff)
downloadcpython-18aaa568fd98ec6adcd58f65ffb1a9f6943cfe53.zip
cpython-18aaa568fd98ec6adcd58f65ffb1a9f6943cfe53.tar.gz
cpython-18aaa568fd98ec6adcd58f65ffb1a9f6943cfe53.tar.bz2
Patch #1576166: Support os.utime for directories on Windows NT+.
-rw-r--r--Lib/test/test_os.py7
-rw-r--r--Misc/NEWS2
-rw-r--r--Modules/posixmodule.c7
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
+