[pypy-commit] pypy ffi-backend: Add support for local/global dlopens
arigo
noreply at buildbot.pypy.org
Thu Jul 26 12:15:01 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch: ffi-backend
Changeset: r56466:f3c8da2815e5
Date: 2012-07-26 12:14 +0200
http://bitbucket.org/pypy/pypy/changeset/f3c8da2815e5/
Log: Add support for local/global dlopens
diff --git a/pypy/module/_cffi_backend/libraryobj.py b/pypy/module/_cffi_backend/libraryobj.py
--- a/pypy/module/_cffi_backend/libraryobj.py
+++ b/pypy/module/_cffi_backend/libraryobj.py
@@ -5,6 +5,7 @@
from pypy.interpreter.typedef import TypeDef
from pypy.rpython.lltypesystem import lltype, rffi
from pypy.rlib.rdynload import DLLHANDLE, dlopen, dlsym, dlclose, DLOpenError
+from pypy.rlib.rdynload import RTLD_GLOBAL
from pypy.module._cffi_backend.cdataobj import W_CData
from pypy.module._cffi_backend.ctypeobj import W_CType
@@ -14,11 +15,15 @@
class W_Library(Wrappable):
handle = rffi.cast(DLLHANDLE, 0)
- def __init__(self, space, filename):
+ def __init__(self, space, filename, is_global):
self.space = space
+ if is_global and RTLD_GLOBAL is not None:
+ mode = RTLD_GLOBAL
+ else:
+ mode = -1 # default value, corresponds to RTLD_LOCAL
with rffi.scoped_str2charp(filename) as ll_libname:
try:
- self.handle = dlopen(ll_libname)
+ self.handle = dlopen(ll_libname, mode)
except DLOpenError, e:
raise operationerrfmt(space.w_OSError,
"cannot load '%s': %s",
@@ -77,7 +82,7 @@
W_Library.acceptable_as_base_class = False
- at unwrap_spec(filename=str)
-def load_library(space, filename):
- lib = W_Library(space, filename)
+ at unwrap_spec(filename=str, is_global=int)
+def load_library(space, filename, is_global=0):
+ lib = W_Library(space, filename, is_global)
return space.wrap(lib)
diff --git a/pypy/rlib/rdynload.py b/pypy/rlib/rdynload.py
--- a/pypy/rlib/rdynload.py
+++ b/pypy/rlib/rdynload.py
@@ -114,6 +114,7 @@
if _WIN32:
DLLHANDLE = rwin32.HMODULE
+ RTLD_GLOBAL = None
def dlopen(name, mode=-1):
# mode is unused on windows, but a consistant signature
More information about the pypy-commit
mailing list