MODULE = FFI::Platypus PACKAGE = FFI::Platypus::DL
BOOT:
{
HV *stash;
stash = gv_stashpv("FFI::Platypus::DL", TRUE);
#ifdef RTLD_LAZY
newCONSTSUB(stash, "RTLD_PLATYPUS_DEFAULT", newSViv(RTLD_LAZY));
newCONSTSUB(stash, "RTLD_LAZY", newSViv(RTLD_LAZY));
#else
newCONSTSUB(stash, "RTLD_PLATYPUS_DEFAULT", newSViv(0));
#endif
#ifdef RTLD_NOW
newCONSTSUB(stash, "RTLD_NOW", newSViv(RTLD_NOW));
#endif
#ifdef RTLD_GLOBAL
newCONSTSUB(stash, "RTLD_GLOBAL", newSViv(RTLD_GLOBAL));
#endif
#ifdef RTLD_LOCAL
newCONSTSUB(stash, "RTLD_LOCAL", newSViv(RTLD_LOCAL));
#endif
#ifdef RTLD_NODELETE
newCONSTSUB(stash, "RTLD_NODELETE", newSViv(RTLD_NODELETE));
#endif
#ifdef RTLD_NOLOAD
newCONSTSUB(stash, "RTLD_NOLOAD", newSViv(RTLD_NOLOAD));
#endif
#ifdef RTLD_DEEPBIND
newCONSTSUB(stash, "RTLD_DEEPBIND", newSViv(RTLD_DEEPBIND));
#endif
}
void *
dlopen(filename, flags);
ffi_pl_string filename
int flags
INIT:
void *ptr;
CODE:
ptr = dlopen(filename, flags);
if(ptr == NULL)
{
XSRETURN_EMPTY;
}
else
{
RETVAL = ptr;
}
OUTPUT:
RETVAL
const char *
dlerror();
void *
dlsym(handle, symbol);
void *handle
const char *symbol
INIT:
void *ptr;
CODE:
ptr = dlsym(handle, symbol);
if(ptr == NULL)
{
XSRETURN_EMPTY;
}
else
{
RETVAL = ptr;
}
OUTPUT:
RETVAL
int
dlclose(handle);
void *handle
CODE:
if(!PL_dirty)
RETVAL = dlclose(handle);
else
RETVAL = 0;
OUTPUT:
RETVAL