Object
static VALUE library_dlerror(VALUE self) { char errmsg[1024]; dl_error(errmsg, sizeof(errmsg)); return rb_tainted_str_new2(errmsg); }
static VALUE library_initialize(VALUE self, VALUE libname, VALUE libflags) { Library* library; int flags; Check_Type(libflags, T_FIXNUM); Data_Get_Struct(self, Library, library); flags = libflags != Qnil ? NUM2UINT(libflags) : 0; library->handle = dl_open(libname != Qnil ? StringValueCStr(libname) : NULL, flags); if (library->handle == NULL) { char errmsg[1024]; dl_error(errmsg, sizeof(errmsg)); rb_raise(rb_eLoadError, "Could not open library '%s': %s", libname != Qnil ? StringValueCStr(libname) : "[current process]", errmsg); } #ifdef __CYGWIN__ // On Cygwin 1.7.17 "dlsym(dlopen(0,0), 'getpid')" fails. (dlerror: "No such process") // As a workaround we can use "dlsym(RTLD_DEFAULT, 'getpid')" instead. // Since 0 == RTLD_DEFAULT we won't call dl_close later. if (libname == Qnil) { dl_close(library->handle); library->handle = RTLD_DEFAULT; } #endif rb_iv_set(self, "@name", libname != Qnil ? libname : rb_str_new2("[current process]")); return self; }
static VALUE library_open(VALUE klass, VALUE libname, VALUE libflags) { return library_initialize(library_allocate(klass), libname, libflags); }
static VALUE library_dlsym(VALUE self, VALUE name) { Library* library; void* address = NULL; Check_Type(name, T_STRING); Data_Get_Struct(self, Library, library); address = dl_sym(library->handle, StringValueCStr(name)); return address != NULL ? symbol_new(self, address, name) : Qnil; }
static VALUE library_dlsym(VALUE self, VALUE name) { Library* library; void* address = NULL; Check_Type(name, T_STRING); Data_Get_Struct(self, Library, library); address = dl_sym(library->handle, StringValueCStr(name)); return address != NULL ? symbol_new(self, address, name) : Qnil; }
static VALUE library_dlsym(VALUE self, VALUE name) { Library* library; void* address = NULL; Check_Type(name, T_STRING); Data_Get_Struct(self, Library, library); address = dl_sym(library->handle, StringValueCStr(name)); return address != NULL ? symbol_new(self, address, name) : Qnil; }
Generated with the Darkfish Rdoc Generator 2.