diff options
-rw-r--r-- | Lib/test/test_os.py | 8 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Modules/posixmodule.c | 6 |
3 files changed, 13 insertions, 3 deletions
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 9497777..984484c 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -223,6 +223,14 @@ class StatAttributeTests(unittest.TestCase): except TypeError: pass + # Restrict test to Win32, since there is no guarantee other + # systems support centiseconds + if sys.platform == 'win32': + def test_1565150(self): + t1 = 1159195039.25 + os.utime(self.fname, (t1, t1)) + self.assertEquals(os.stat(self.fname).st_mtime, t1) + from test import mapping_tests class EnvironTests(mapping_tests.BasicTestMappingProtocol): @@ -75,6 +75,8 @@ Core and builtins Library ------- +- Bug #1565150: Fix subsecond processing for os.utime on Windows. + - Support for MSVC 8 was added to bdist_wininst. - Bug #1446043: correctly raise a LookupError if an encoding name given diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 45ea988..93d0300 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -792,7 +792,7 @@ time_t_to_FILE_TIME(int time_in, int nsec_in, FILETIME *out_ptr) /* XXX endianness */ __int64 out; out = time_in + secs_between_epochs; - out = out * 10000000 + nsec_in; + out = out * 10000000 + nsec_in / 100; memcpy(out_ptr, &out, sizeof(out)); } @@ -2501,11 +2501,11 @@ posix_utime(PyObject *self, PyObject *args) if (extract_time(PyTuple_GET_ITEM(arg, 0), &atimesec, &ausec) == -1) goto done; - time_t_to_FILE_TIME(atimesec, ausec, &atime); + time_t_to_FILE_TIME(atimesec, 1000*ausec, &atime); if (extract_time(PyTuple_GET_ITEM(arg, 1), &mtimesec, &musec) == -1) goto done; - time_t_to_FILE_TIME(mtimesec, musec, &mtime); + time_t_to_FILE_TIME(mtimesec, 1000*musec, &mtime); } if (!SetFileTime(hFile, NULL, &atime, &mtime)) { /* Avoid putting the file name into the error here, |