Author: Philip Jenvey <pjen...@underboss.org> Branch: py3k Changeset: r84695:018393ac2800 Date: 2016-05-25 21:36 -0700 http://bitbucket.org/pypy/pypy/changeset/018393ac2800/
Log: add futimes support 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 @@ -1354,7 +1354,7 @@ @unwrap_spec( - path=path_or_fd(allow_fd=rposix.HAVE_FUTIMENS), + path=path_or_fd(allow_fd=rposix.HAVE_FUTIMENS or rposix.HAVE_FUTIMES), w_times=WrappedDefault(None), w_ns=kwonly(WrappedDefault(None)), dir_fd=DirFD(rposix.HAVE_UTIMENSAT), follow_symlinks=kwonly(bool)) def utime(space, path, w_times, w_ns, dir_fd=DEFAULT_DIR_FD, @@ -1408,26 +1408,34 @@ atime_s, atime_ns = convert_ns(space, args_w[0]) mtime_s, mtime_ns = convert_ns(space, args_w[1]) - if rposix.HAVE_FUTIMENS and path.as_fd != -1: + if path.as_fd != -1: if dir_fd != DEFAULT_DIR_FD: raise oefmt(space.w_ValueError, "utime: can't specify both dir_fd and fd") if not follow_symlinks: raise oefmt(space.w_ValueError, "utime: cannot use fd and follow_symlinks together") - if now: - atime_ns = mtime_ns = rposix.UTIME_NOW - try: - rposix.futimens(path.as_fd, atime_s, atime_ns, mtime_s, mtime_ns) + if rposix.HAVE_FUTIMENS: + if now: + atime_ns = mtime_ns = rposix.UTIME_NOW + try: + rposix.futimens(path.as_fd, + atime_s, atime_ns, mtime_s, mtime_ns) + return + except OSError as e: + # CPython's Modules/posixmodule.c::posix_utime() has + # this comment: + # /* Avoid putting the file name into the error here, + # as that may confuse the user into believing that + # something is wrong with the file, when it also + # could be the time stamp that gives a problem. */ + # so we use wrap_oserror() instead of wrap_oserror2() + # here + raise wrap_oserror(space, e) + elif rposix.HAVE_FUTIMES: + do_utimes(space, rposix.futimes, path.as_fd, + atime_s, atime_ns, mtime_s, mtime_ns, now) return - except OSError as e: - # CPython's Modules/posixmodule.c::posix_utime() has this comment: - # /* Avoid putting the file name into the error here, - # as that may confuse the user into believing that - # something is wrong with the file, when it also - # could be the time stamp that gives a problem. */ - # so we use wrap_oserror() instead of wrap_oserror2() here - raise wrap_oserror(space, e) if rposix.HAVE_UTIMENSAT: path_b = path.as_bytes _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit