[pypy-commit] pypy py3.3: os.stat() now accepts fd instead of the path
amauryfa
noreply at buildbot.pypy.org
Sun Jun 28 10:26:50 CEST 2015
Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: py3.3
Changeset: r78336:e62a0a0b8520
Date: 2015-06-28 10:25 +0200
http://bitbucket.org/pypy/pypy/changeset/e62a0a0b8520/
Log: os.stat() now accepts fd instead of the path
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
@@ -62,8 +62,15 @@
return self.space.fsdecode_w(self.w_obj)
@specialize.memo()
-def dispatch_filename(func, tag=0):
+def make_dispatch_function(func, tag, allow_fd_fn=None):
def dispatch(space, w_fname, *args):
+ if allow_fd_fn is not None:
+ try:
+ fd = space.c_int_w(w_fname)
+ except OperationError:
+ pass
+ else:
+ return allow_fd_fn(fd, *args)
if space.isinstance_w(w_fname, space.w_unicode):
fname = FileEncoder(space, w_fname)
return func(fname, *args)
@@ -72,6 +79,10 @@
return func(fname, *args)
return dispatch
+ at specialize.arg(0, 1)
+def dispatch_filename(func, tag=0, allow_fd_fn=None):
+ return make_dispatch_function(func, tag, allow_fd_fn)
+
@specialize.memo()
def dispatch_filename_2(func):
def dispatch(space, w_fname1, w_fname2, *args):
@@ -302,7 +313,8 @@
"""
try:
- st = dispatch_filename(rposix_stat.stat)(space, w_path)
+ st = dispatch_filename(rposix_stat.stat, 0,
+ allow_fd_fn=rposix_stat.fstat)(space, w_path)
except OSError, e:
raise wrap_oserror2(space, e, w_path)
else:
diff --git a/pypy/module/posix/test/test_posix2.py b/pypy/module/posix/test/test_posix2.py
--- a/pypy/module/posix/test/test_posix2.py
+++ b/pypy/module/posix/test/test_posix2.py
@@ -109,6 +109,7 @@
s = posix.read(fd, 1)
assert s == b'i'
st = posix.fstat(fd)
+ assert st == posix.stat(fd)
posix.close(fd2)
posix.close(fd)
More information about the pypy-commit
mailing list