Author: Ronan Lamy <[email protected]>
Branch: follow_symlinks
Changeset: r83288:2c9c63383ddd
Date: 2016-03-23 04:46 +0000
http://bitbucket.org/pypy/pypy/changeset/2c9c63383ddd/
Log: Actually enable dir_fd support in the functions where it's
implemented
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
@@ -105,6 +105,7 @@
return func(fname1, fname2, *args)
return dispatch
+
if hasattr(rposix, 'AT_FDCWD'):
DEFAULT_DIR_FD = rposix.AT_FDCWD
else:
@@ -117,21 +118,25 @@
else:
return space.c_int_w(w_value)
+class _DirFD(Unwrapper):
+ def unwrap(self, space, w_value):
+ return _unwrap_fd(space, w_value)
-class DirFD(Unwrapper):
+class _DirFD_Unavailable(Unwrapper):
def unwrap(self, space, w_value):
dir_fd = _unwrap_fd(space, w_value)
if dir_fd == DEFAULT_DIR_FD:
return dir_fd
- elif not DIR_FD_AVAILABLE:
+ else:
raise oefmt(
space.w_NotImplementedError,
"dir_fd unavailable on this platform")
- else:
- return dir_fd
+def DirFD(available=False):
+ return _DirFD if available else _DirFD_Unavailable
-@unwrap_spec(flags=c_int, mode=c_int, dir_fd=DirFD)
+
+@unwrap_spec(flags=c_int, mode=c_int, dir_fd=DirFD(rposix.HAVE_OPENAT))
def open(space, w_path, flags, mode=0777, dir_fd=DEFAULT_DIR_FD):
"""open(path, flags, mode=0o777, *, dir_fd=None)
@@ -334,7 +339,7 @@
else:
return build_stat_result(space, st)
-@unwrap_spec(dir_fd=DirFD, follow_symlinks=kwonly(bool))
+@unwrap_spec(dir_fd=DirFD(available=False), follow_symlinks=kwonly(bool))
def stat(space, w_path, dir_fd=DEFAULT_DIR_FD, follow_symlinks=True):
"""stat(path, *, dir_fd=None, follow_symlinks=True) -> stat result
@@ -359,7 +364,7 @@
else:
return build_stat_result(space, st)
-@unwrap_spec(dir_fd=DirFD)
+@unwrap_spec(dir_fd=DirFD(available=False))
def lstat(space, w_path, dir_fd=DEFAULT_DIR_FD):
"""lstat(path, *, dir_fd=None) -> stat result
@@ -439,7 +444,7 @@
raise wrap_oserror(space, e)
@unwrap_spec(mode=c_int,
- dir_fd=DirFD, effective_ids=kwonly(bool), follow_symlinks=kwonly(bool))
+ dir_fd=DirFD(available=False), effective_ids=kwonly(bool),
follow_symlinks=kwonly(bool))
def access(space, w_path, mode,
dir_fd=DEFAULT_DIR_FD, effective_ids=True, follow_symlinks=True):
"""\
@@ -499,7 +504,7 @@
else:
return space.wrap(rc)
-@unwrap_spec(dir_fd=DirFD)
+@unwrap_spec(dir_fd=DirFD(rposix.HAVE_UNLINKAT))
def unlink(space, w_path, dir_fd=DEFAULT_DIR_FD):
"""unlink(path, *, dir_fd=None)
@@ -518,7 +523,7 @@
except OSError as e:
raise wrap_oserror2(space, e, w_path)
-@unwrap_spec(dir_fd=DirFD)
+@unwrap_spec(dir_fd=DirFD(rposix.HAVE_UNLINKAT))
def remove(space, w_path, dir_fd=DEFAULT_DIR_FD):
"""remove(path, *, dir_fd=None)
@@ -583,7 +588,7 @@
except OSError, e:
raise wrap_oserror2(space, e, w_path)
-@unwrap_spec(mode=c_int, dir_fd=DirFD)
+@unwrap_spec(mode=c_int, dir_fd=DirFD(rposix.HAVE_MKDIRAT))
def mkdir(space, w_path, mode=0o777, dir_fd=DEFAULT_DIR_FD):
"""mkdir(path, mode=0o777, *, dir_fd=None)
@@ -604,7 +609,7 @@
except OSError as e:
raise wrap_oserror2(space, e, w_path)
-@unwrap_spec(dir_fd=DirFD)
+@unwrap_spec(dir_fd=DirFD(rposix.HAVE_UNLINKAT))
def rmdir(space, w_path, dir_fd=DEFAULT_DIR_FD):
"""rmdir(path, *, dir_fd=None)
@@ -751,7 +756,7 @@
raise wrap_oserror(space, e)
return space.newtuple([space.wrap(fd1), space.wrap(fd2)])
-@unwrap_spec(mode=c_int, dir_fd=DirFD, follow_symlinks=kwonly(bool))
+@unwrap_spec(mode=c_int, dir_fd=DirFD(available=False),
follow_symlinks=kwonly(bool))
def chmod(space, w_path, mode, dir_fd=DEFAULT_DIR_FD, follow_symlinks=True):
"""chmod(path, mode, *, dir_fd=None, follow_symlinks=True)
@@ -784,7 +789,7 @@
except OSError, e:
raise wrap_oserror(space, e)
-@unwrap_spec(src_dir_fd=DirFD, dst_dir_fd=DirFD)
+@unwrap_spec(src_dir_fd=DirFD(available=False),
dst_dir_fd=DirFD(available=False))
def rename(space, w_old, w_new,
src_dir_fd=DEFAULT_DIR_FD, dst_dir_fd=DEFAULT_DIR_FD):
"""rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
@@ -801,7 +806,7 @@
except OSError, e:
raise wrap_oserror(space, e)
-@unwrap_spec(src_dir_fd=DirFD, dst_dir_fd=DirFD)
+@unwrap_spec(src_dir_fd=DirFD(available=False),
dst_dir_fd=DirFD(available=False))
def replace(space, w_old, w_new,
src_dir_fd=DEFAULT_DIR_FD, dst_dir_fd=DEFAULT_DIR_FD):
"""replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
@@ -818,7 +823,7 @@
except OSError, e:
raise wrap_oserror(space, e)
-@unwrap_spec(mode=c_int, dir_fd=DirFD)
+@unwrap_spec(mode=c_int, dir_fd=DirFD(rposix.HAVE_MKFIFOAT))
def mkfifo(space, w_path, mode=0666, dir_fd=DEFAULT_DIR_FD):
"""mkfifo(path, mode=0o666, *, dir_fd=None)
@@ -837,7 +842,7 @@
except OSError as e:
raise wrap_oserror2(space, e, w_path)
-@unwrap_spec(mode=c_int, device=c_int, dir_fd=DirFD)
+@unwrap_spec(mode=c_int, device=c_int, dir_fd=DirFD(rposix.HAVE_MKNODAT))
def mknod(space, w_filename, mode=0600, device=0, dir_fd=DEFAULT_DIR_FD):
"""mknod(filename, mode=0o600, device=0, *, dir_fd=None)
@@ -899,7 +904,8 @@
@unwrap_spec(
src='fsencode', dst='fsencode',
- src_dir_fd=DirFD, dst_dir_fd=DirFD, follow_symlinks=kwonly(bool))
+ src_dir_fd=DirFD(available=False), dst_dir_fd=DirFD(available=False),
+ follow_symlinks=kwonly(bool))
def link(
space, src, dst,
src_dir_fd=DEFAULT_DIR_FD, dst_dir_fd=DEFAULT_DIR_FD,
@@ -924,7 +930,7 @@
raise wrap_oserror(space, e)
-@unwrap_spec(dir_fd=DirFD)
+@unwrap_spec(dir_fd=DirFD(rposix.HAVE_SYMLINKAT))
def symlink(space, w_src, w_dst, w_target_is_directory=None,
dir_fd=DEFAULT_DIR_FD):
"""symlink(src, dst, target_is_directory=False, *, dir_fd=None)
@@ -951,7 +957,7 @@
raise wrap_oserror(space, e)
-@unwrap_spec(dir_fd=DirFD)
+@unwrap_spec(dir_fd=DirFD(rposix.HAVE_READLINKAT))
def readlink(space, w_path, dir_fd=DEFAULT_DIR_FD):
"""readlink(path, *, dir_fd=None) -> path
@@ -1131,7 +1137,7 @@
raise wrap_oserror(space, e)
return space.wrap(ret)
-@unwrap_spec(dir_fd=DirFD, follow_symlinks=kwonly(bool))
+@unwrap_spec(dir_fd=DirFD(available=False), follow_symlinks=kwonly(bool))
def utime(space, w_path, w_tuple, dir_fd=DEFAULT_DIR_FD, follow_symlinks=True):
"""utime(path, times=None, *, ns=None, dir_fd=None, follow_symlinks=True)
@@ -1572,7 +1578,7 @@
@unwrap_spec(
path='fsencode', uid=c_uid_t, gid=c_gid_t,
- dir_fd=DirFD, follow_symlinks=kwonly(bool))
+ dir_fd=DirFD(available=False), follow_symlinks=kwonly(bool))
def chown(space, path, uid, gid, dir_fd=DEFAULT_DIR_FD, follow_symlinks=True):
"""chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit