Author: Armin Rigo <[email protected]>
Branch:
Changeset: r88156:33719a46d098
Date: 2016-11-06 18:37 +0100
http://bitbucket.org/pypy/pypy/changeset/33719a46d098/
Log: Fixes: one file used to let RPython-level OSError escape; the other,
DLOpenError.
diff --git a/pypy/module/_rawffi/alt/interp_funcptr.py
b/pypy/module/_rawffi/alt/interp_funcptr.py
--- a/pypy/module/_rawffi/alt/interp_funcptr.py
+++ b/pypy/module/_rawffi/alt/interp_funcptr.py
@@ -325,6 +325,8 @@
self.cdll = libffi.CDLL(name, mode)
except DLOpenError as e:
raise wrap_dlopenerror(space, e, self.name)
+ except OSError as e:
+ raise wrap_oserror(space, e)
def getfunc(self, space, w_name, w_argtypes, w_restype):
return _getfunc(space, self, w_name, w_argtypes, w_restype)
@@ -376,8 +378,4 @@
# ========================================================================
def get_libc(space):
- try:
- return space.wrap(W_CDLL(space, get_libc_name(), -1))
- except OSError as e:
- raise wrap_oserror(space, e)
-
+ return space.wrap(W_CDLL(space, get_libc_name(), -1))
diff --git a/pypy/module/_rawffi/interp_rawffi.py
b/pypy/module/_rawffi/interp_rawffi.py
--- a/pypy/module/_rawffi/interp_rawffi.py
+++ b/pypy/module/_rawffi/interp_rawffi.py
@@ -224,14 +224,17 @@
raise oefmt(space.w_ValueError, "Cannot find symbol %s", name)
return space.wrap(address_as_uint)
+def open_cdll(space, name):
+ try:
+ return CDLL(name)
+ except DLOpenError as e:
+ raise wrap_dlopenerror(space, e, name or "<None>")
+ except OSError as e:
+ raise wrap_oserror(space, e)
+
@unwrap_spec(name='str_or_None')
def descr_new_cdll(space, w_type, name):
- try:
- cdll = CDLL(name)
- except DLOpenError as e:
- raise wrap_dlopenerror(space, e, name)
- except OSError as e:
- raise wrap_oserror(space, e)
+ cdll = open_cdll(space, name)
return space.wrap(W_CDLL(space, name, cdll))
W_CDLL.typedef = TypeDef(
@@ -620,10 +623,7 @@
def get_libc(space):
name = get_libc_name()
- try:
- cdll = CDLL(name)
- except OSError as e:
- raise wrap_oserror(space, e)
+ cdll = open_cdll(space, name)
return space.wrap(W_CDLL(space, name, cdll))
def get_errno(space):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit