예제 #1
0
파일: cdlopen.py 프로젝트: pypyjs/pypy
 def __init__(self, ffi, filename, flags):
     with rffi.scoped_str2charp(filename) as ll_libname:
         if filename is None:
             filename = "<None>"
         try:
             handle = dlopen(ll_libname, flags)
         except DLOpenError, e:
             raise wrap_dlopenerror(ffi.space, e, filename)
예제 #2
0
 def __init__(self, ffi, filename, flags):
     with rffi.scoped_str2charp(filename) as ll_libname:
         if filename is None:
             filename = "<None>"
         try:
             handle = dlopen(ll_libname, flags)
         except DLOpenError, e:
             raise wrap_dlopenerror(ffi.space, e, filename)
예제 #3
0
def dlopen_w(space, w_filename, flags):
    from pypy.module._cffi_backend.cdataobj import W_CData
    from pypy.module._cffi_backend import ctypeptr

    autoclose = True
    if isinstance(w_filename, W_CData):
        # 'flags' ignored in this case
        w_ctype = w_filename.ctype
        if (not isinstance(w_ctype, ctypeptr.W_CTypePointer)
                or not w_ctype.is_void_ptr):
            raise oefmt(
                space.w_TypeError,
                "dlopen() takes a file name or 'void *' handle, not '%s'",
                w_ctype.name)
        handle = w_filename.unsafe_escaping_ptr()
        if not handle:
            raise oefmt(space.w_RuntimeError, "cannot call dlopen(NULL)")
        fname = w_ctype.extra_repr(handle)
        handle = rffi.cast(DLLHANDLE, handle)
        autoclose = False
        #
    elif WIN32 and space.isinstance_w(w_filename, space.w_unicode):
        fname = space.text_w(space.repr(w_filename))
        utf8_name = space.utf8_w(w_filename)
        uni_len = space.len_w(w_filename)
        with rffi.scoped_utf82wcharp(utf8_name, uni_len) as ll_libname:
            try:
                handle = dlopenU(ll_libname, flags)
            except DLOpenError as e:
                raise wrap_dlopenerror(space, e, fname)
    else:
        if space.is_none(w_filename):
            fname = None
        else:
            fname = space.fsencode_w(w_filename)
        with rffi.scoped_str2charp(fname) as ll_libname:
            if fname is None:
                fname = "<None>"
            try:
                handle = dlopen(ll_libname, flags)
            except DLOpenError as e:
                raise wrap_dlopenerror(space, e, fname)
    return fname, handle, autoclose
예제 #4
0
 def __init__(self, space, name, mode):
     self.flags = libffi.FUNCFLAG_CDECL
     self.space = space
     if name is None:
         self.name = "<None>"
     else:
         self.name = name
     try:
         self.cdll = libffi.CDLL(name, mode)
     except DLOpenError, e:
         raise wrap_dlopenerror(space, e, self.name)
예제 #5
0
 def __init__(self, ffi, filename, flags):
     with rffi.scoped_str2charp(filename) as ll_libname:
         if filename is None:
             filename = "<None>"
         try:
             handle = dlopen(ll_libname, flags)
         except DLOpenError as e:
             raise wrap_dlopenerror(ffi.space, e, filename)
     W_LibObject.__init__(self, ffi, filename)
     self.libhandle = handle
     self.register_finalizer(ffi.space)
예제 #6
0
 def __init__(self, space, name, mode):
     self.flags = libffi.FUNCFLAG_CDECL
     self.space = space
     if name is None:
         self.name = "<None>"
     else:
         self.name = name
     try:
         self.cdll = libffi.CDLL(name, mode)
     except DLOpenError, e:
         raise wrap_dlopenerror(space, e, self.name)
예제 #7
0
 def __init__(self, space, filename, flags):
     self.space = space
     with rffi.scoped_str2charp(filename) as ll_libname:
         if filename is None:
             filename = "<None>"
         try:
             self.handle = dlopen(ll_libname, flags)
         except DLOpenError as e:
             raise wrap_dlopenerror(space, e, filename)
     self.name = filename
     self.register_finalizer(space)
예제 #8
0
 def __init__(self, space, filename, flags):
     self.space = space
     with rffi.scoped_str2charp(filename) as ll_libname:
         if filename is None:
             filename = "<None>"
         try:
             self.handle = dlopen(ll_libname, flags)
         except DLOpenError as e:
             raise wrap_dlopenerror(space, e, filename)
     self.name = filename
     self.register_finalizer(space)
예제 #9
0
파일: cdlopen.py 프로젝트: mozillazg/pypy
 def __init__(self, ffi, filename, flags):
     with rffi.scoped_str2charp(filename) as ll_libname:
         if filename is None:
             filename = "<None>"
         try:
             handle = dlopen(ll_libname, flags)
         except DLOpenError as e:
             raise wrap_dlopenerror(ffi.space, e, filename)
     W_LibObject.__init__(self, ffi, filename)
     self.libhandle = handle
     self.register_finalizer(ffi.space)
예제 #10
0
def dlopen_w(space, w_filename, flags):
    if WIN32 and space.isinstance_w(w_filename, space.w_unicode):
        fname = space.text_w(space.repr(w_filename))
        unicode_name = space.unicode_w(w_filename)
        with rffi.scoped_unicode2wcharp(unicode_name) as ll_libname:
            try:
                handle = dlopenU(ll_libname, flags)
            except DLOpenError as e:
                raise wrap_dlopenerror(space, e, fname)
    else:
        if space.is_none(w_filename):
            fname = None
        else:
            fname = space.fsencode_w(w_filename)
        with rffi.scoped_str2charp(fname) as ll_libname:
            if fname is None:
                fname = "<None>"
            try:
                handle = dlopen(ll_libname, flags)
            except DLOpenError as e:
                raise wrap_dlopenerror(space, e, fname)
    return fname, handle