Author: Armin Rigo <ar...@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) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit