[pypy-commit] pypy follow_symlinks: Support *_dir_fd arguments in posix.link()

rlamy pypy.commits at gmail.com
Fri Mar 25 23:30:49 EDT 2016


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: follow_symlinks
Changeset: r83383:3da1fa9db8d2
Date: 2016-03-26 03:29 +0000
http://bitbucket.org/pypy/pypy/changeset/3da1fa9db8d2/

Log:	Support *_dir_fd arguments in posix.link()

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
@@ -964,7 +964,7 @@
 
 @unwrap_spec(
     src='fsencode', dst='fsencode',
-    src_dir_fd=DirFD(available=False), dst_dir_fd=DirFD(available=False),
+    src_dir_fd=DirFD(rposix.HAVE_LINKAT), dst_dir_fd=DirFD(rposix.HAVE_LINKAT),
     follow_symlinks=kwonly(bool))
 def link(
         space, src, dst,
@@ -985,8 +985,12 @@
   platform.  If they are unavailable, using them will raise a
   NotImplementedError."""
     try:
-        os.link(src, dst)
-    except OSError, e:
+        if (src_dir_fd != DEFAULT_DIR_FD or dst_dir_fd != DEFAULT_DIR_FD
+                or not follow_symlinks):
+            rposix.linkat(src, dst, src_dir_fd, dst_dir_fd, follow_symlinks)
+        else:
+            rposix.link(src, dst)
+    except OSError as e:
         raise wrap_oserror(space, e)
 
 


More information about the pypy-commit mailing list