[pypy-commit] pypy default: #2408: support for os.utime('foo', (-12.34, -56.78))
arigo
pypy.commits at gmail.com
Wed Nov 2 11:51:06 EDT 2016
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r88085:8822b3e22aac
Date: 2016-11-02 16:50 +0100
http://bitbucket.org/pypy/pypy/changeset/8822b3e22aac/
Log: #2408: support for os.utime('foo', (-12.34, -56.78))
diff --git a/rpython/rlib/rposix.py b/rpython/rlib/rposix.py
--- a/rpython/rlib/rposix.py
+++ b/rpython/rlib/rposix.py
@@ -1362,8 +1362,14 @@
def _time_to_timeval(t, l_timeval):
import math
fracpart, intpart = math.modf(t)
- rffi.setintfield(l_timeval, 'c_tv_sec', int(intpart))
- rffi.setintfield(l_timeval, 'c_tv_usec', int(fracpart * 1e6))
+ intpart = int(intpart)
+ fracpart = int(fracpart * 1e6)
+ if fracpart < 0:
+ intpart -= 1
+ fracpart += 1000000
+ assert 0 <= fracpart < 1000000
+ rffi.setintfield(l_timeval, 'c_tv_sec', intpart)
+ rffi.setintfield(l_timeval, 'c_tv_usec', fracpart)
if not _WIN32:
TMSP = lltype.Ptr(TMS)
diff --git a/rpython/rlib/test/test_rposix.py b/rpython/rlib/test/test_rposix.py
--- a/rpython/rlib/test/test_rposix.py
+++ b/rpython/rlib/test/test_rposix.py
@@ -59,6 +59,17 @@
compile(f, (str, float))(str(fname), t1)
assert t1 == os.stat(str(fname)).st_mtime
+ def test_utime_negative_fraction(self):
+ def f(fname, t1):
+ os.utime(fname, (t1, t1))
+
+ fname = udir.join('test_utime_negative_fraction.txt')
+ fname.ensure()
+ t1 = -123.75
+ compile(f, (str, float))(str(fname), t1)
+ got = os.stat(str(fname)).st_mtime
+ assert got == -123 or got == -123.75
+
@win_only
def test__getfullpathname(self):
posix = __import__(os.name)
More information about the pypy-commit
mailing list