Author: Philip Jenvey <pjen...@underboss.org> Branch: py3k Changeset: r84696:a8f2ced07ed6 Date: 2016-05-25 23:08 -0700 http://bitbucket.org/pypy/pypy/changeset/a8f2ced07ed6/
Log: try to cleanup by unfortunately duplicating call_rposix here diff --git a/pypy/module/posix/interp_posix.py b/pypy/module/posix/interp_posix.py --- a/pypy/module/posix/interp_posix.py +++ b/pypy/module/posix/interp_posix.py @@ -43,9 +43,6 @@ if num < -(1 << 31) or num >= (1 << 32): raise oefmt(space.w_OverflowError, "integer out of range") -# specialize utime when called w/ None for use w/ call_rposix -utime_now = func_with_new_name(rposix.utime, 'utime_now') - class FileEncoder(object): is_unicode = True @@ -1468,35 +1465,32 @@ if not follow_symlinks: raise argument_unavailable(space, "utime", "follow_symlinks") - do_utimes(space, rposix.utime, path, + do_utimes(space, _dispatch_utime, path, atime_s, atime_ns, mtime_s, mtime_ns, now) +@specialize.argtype(1) +def _dispatch_utime(path, times): + # XXX: a dup. of call_rposix to specialize rposix.utime taking a + # Path for win32 support w/ do_utimes + if path.as_unicode is not None: + return rposix.utime(path.as_unicode, times) + else: + path_b = path.as_bytes + assert path_b is not None + return rposix.utime(path.as_bytes, times) @specialize.arg(1) def do_utimes(space, func, arg, atime_s, atime_ns, mtime_s, mtime_ns, now): """Common implementation for f/l/utimes""" - # convert back to utimes style floats. loses precision of - # nanoseconds but utimes only support microseconds anyway - if now: - # satisfy the translator - atime = mtime = 0.0 - else: - atime = atime_s + (atime_ns / 1e9) - mtime = mtime_s + (mtime_ns / 1e9) - try: - if func is rposix.utime: - # XXX: specialize rposix.utime taking a Path (call_rposix) - # for win32 (unicode filenames) support - if now: - call_rposix(utime_now, arg, None) - else: - call_rposix(rposix.utime, arg, (atime, mtime)) + if now: + func(arg, None) else: - if now: - func(arg, None) - else: - func(arg, (atime, mtime)) + # convert back to utimes style floats. loses precision of + # nanoseconds but utimes only support microseconds anyway + atime = atime_s + (atime_ns / 1e9) + mtime = mtime_s + (mtime_ns / 1e9) + func(arg, (atime, mtime)) except OSError as e: # see comment above raise wrap_oserror(space, e) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit