Author: Amaury Forgeot d'Arc <amaur...@gmail.com> Branch: py3.5 Changeset: r91654:16f97608b715 Date: 2017-05-06 11:46 +0200 http://bitbucket.org/pypy/pypy/changeset/16f97608b715/
Log: As os.link() implementation on Windows diff --git a/pypy/module/posix/__init__.py b/pypy/module/posix/__init__.py --- a/pypy/module/posix/__init__.py +++ b/pypy/module/posix/__init__.py @@ -69,6 +69,7 @@ 'chmod': 'interp_posix.chmod', 'rename': 'interp_posix.rename', 'replace': 'interp_posix.replace', + 'link': 'interp_posix.link', 'umask': 'interp_posix.umask', '_exit': 'interp_posix._exit', 'utime': 'interp_posix.utime', @@ -109,8 +110,6 @@ interpleveldefs['killpg'] = 'interp_posix.killpg' if hasattr(os, 'getpid'): interpleveldefs['getpid'] = 'interp_posix.getpid' - if hasattr(os, 'link'): - interpleveldefs['link'] = 'interp_posix.link' if hasattr(os, 'symlink'): interpleveldefs['symlink'] = 'interp_posix.symlink' if hasattr(os, 'readlink'): diff --git a/rpython/rlib/rposix.py b/rpython/rlib/rposix.py --- a/rpython/rlib/rposix.py +++ b/rpython/rlib/rposix.py @@ -1296,9 +1296,17 @@ @replace_os_function('link') @specialize.argtype(0, 1) def link(oldpath, newpath): - oldpath = _as_bytes0(oldpath) - newpath = _as_bytes0(newpath) - handle_posix_error('link', c_link(oldpath, newpath)) + if not _WIN32: + oldpath = _as_bytes0(oldpath) + newpath = _as_bytes0(newpath) + handle_posix_error('link', c_link(oldpath, newpath)) + else: + traits = _preferred_traits(path1) + win32traits = make_win32_traits(traits) + oldpath = traits.as_str0(oldpath) + newpath = traits.as_str0(newpath) + if not win32traits.CreateHardLink(newpath, oldpath, None): + raise rwin32.lastSavedWindowsError() @replace_os_function('symlink') @specialize.argtype(0, 1) diff --git a/rpython/rlib/rwin32file.py b/rpython/rlib/rwin32file.py --- a/rpython/rlib/rwin32file.py +++ b/rpython/rlib/rwin32file.py @@ -234,6 +234,12 @@ rwin32.BOOL, save_err=rffi.RFFI_SAVE_LASTERROR) + CreateHardLink = external( + 'CreateHardLink' + suffix, + [traits.CCHARP, traits.CCHARP, rwin32.LPSECURITY_ATTRIBUTES], + rwin32.BOOL, + save_err=rffi.RFFI_SAVE_LASTERROR) + return Win32Traits def make_longlong(high, low): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit