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);
}
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.