X-Git-Url: http://git.imager.perl.org/imager.git/blobdiff_plain/97ac0a9684911cf11b8ef6fdf925295cd8fc42e7..52f2b10a2d0eb84f8c300146d57f6643b91619b3:/dynaload.c diff --git a/dynaload.c b/dynaload.c index 4c6ce7c8..75f1b3f5 100644 --- a/dynaload.c +++ b/dynaload.c @@ -1,3 +1,24 @@ +#if defined(OS_hpux) +#include +typedef shl_t minthandle_t; +#elif defined(WIN32) +#define WIN32_LEAN_AND_MEAN +#include +typedef HMODULE minthandle_t; +#undef WIN32_LEAN_AND_MEAN +#else +#include +typedef void *minthandle_t; +#endif + +#include "plug.h" + +struct DSO_handle_tag { + minthandle_t handle; + char *filename; + func_ptr *function_list; +}; + #include "imager.h" #include "dynaload.h" /* #include "XSUB.h" so we can compile on threaded perls */ @@ -38,6 +59,11 @@ DSO_call(DSO_handle *handle,int func_index,HV* hv) { (handle->function_list[func_index].iptr)((void*)hv); } +func_ptr * +DSO_funclist(DSO_handle *handle) { + return handle->function_list; +} + #if defined( OS_hpux ) @@ -168,87 +194,6 @@ dlclose(minthandle_t h) { } #endif /* __EMX__ */ -#ifdef OS_darwin - -#import - -static char *dl_error = "unknown"; - -static char *dlopen(char *path, int mode /* mode is ignored */) -{ - int dyld_result; - NSObjectFileImage ofile; - NSModule handle = NULL; - - - - dyld_result = NSCreateObjectFileImageFromFile(path, &ofile); - if (dyld_result != NSObjectFileImageSuccess) - { - switch (dyld_result) { - case NSObjectFileImageFailure: - dl_error = "object file setup failure"; - break; - case NSObjectFileImageInappropriateFile: - dl_error = "not a Mach-O MH_BUNDLE file type"; - break; - case NSObjectFileImageArch: - dl_error = "no object for this architecture"; - break; - case NSObjectFileImageFormat: - dl_error = "bad object file format"; - break; - case NSObjectFileImageAccess: - dl_error = "can't read object file"; - break; - default: - dl_error = "unknown error from NSCreateObjectFileImageFromFile()"; - break; - } - } - else - { - // NSLinkModule will cause the run to abort on any link error's - // not very friendly but the error recovery functionality is limited. - handle = NSLinkModule(ofile, path, TRUE); - } - - return handle; -} - -static void * -dlsym(void *handle, char *symbol) -{ - void *addr; - - if (NSIsSymbolNameDefined(symbol)) - { - addr = NSAddressOfSymbol(NSLookupAndBindSymbol(symbol)); - } - else - { - dl_error = "cannot find symbol"; - addr = NULL; - } - - return addr; -} - -static int dlclose(void *handle) /* stub only */ -{ - return 0; -} - -static char *dlerror(void) /* stub only */ -{ - printf("Error occurred\n"); - return dl_error; -} - -#define RTLD_LAZY 0 - -#endif - void* DSO_open(char* file,char** evalstring) { void *d_handle;