diff -c -r1.1 -r1.2 *** config-h.in 2002/10/13 18:22:15 1.1 --- config-h.in 2003/06/11 08:56:28 1.2 *************** *** 72,77 **** --- 72,80 ---- /* Define if you have the header file. */ #undef HAVE_DLFCN_H + /* Define if you have the header file. */ + #undef HAVE_DLL_H + /* Define if you have the header file. */ #undef HAVE_ERRNO_H *************** *** 140,145 **** --- 143,151 ---- /* Define if you have the GNU dld library. */ #undef HAVE_DLD + + /* Define if you have the IBM dll library. */ + #undef HAVE_DLLLOAD /* Define if dlsym() requires a leading underscore in symbol names. */ #undef NEED_USCORE diff -c -r1.1 -r1.2 *** ltdl.c 2002/10/23 01:28:37 1.1 --- ltdl.c 2003/06/11 08:56:28 1.2 *************** *** 1450,1455 **** --- 1450,1517 ---- + /* --- DLLLOAD() INTERFACE LOADER --- */ + + + #if HAVE_DLLLOAD + + /* dynamic linking with dllload */ + + #if HAVE_DLL_H + #include + #endif + + static lt_module + sys_dllload (loader_data, filename) + lt_user_data loader_data; + const char *filename; + { + lt_module module = dllload (filename); + + return module; + } + + static int + sys_dllfree (loader_data, module) + lt_user_data loader_data; + lt_module module; + { + int errors = 0; + + if (module && (dllfree ((dllhandle *) (module)) != 0)) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (CANNOT_CLOSE)); + ++errors; + } + + return errors; + } + + static lt_ptr + sys_dllsym (loader_data, module, symbol) + lt_user_data loader_data; + lt_module module; + const char *symbol; + { + lt_ptr address = NULL; + + if ((address = dllqueryfn( (dllhandle *)module, symbol)) == NULL && + (address = dllqueryvar( (dllhandle *)module, symbol)) == NULL) + { + LT_DLMUTEX_SETERROR (LT_DLSTRERROR (SYMBOL_NOT_FOUND)); + } + + return address; + } + + static struct lt_user_dlloader sys_dll = { + 0, sys_dllload, sys_dllfree, sys_dllsym, 0, 0 + }; + + #endif /* HAVE_DLLLOAD */ + + + /* --- DLPREOPEN() INTERFACE LOADER --- */ *************** *** 1740,1745 **** --- 1802,1810 ---- #endif #ifdef __BEOS__ errors += lt_dlloader_add (lt_dlloader_next (0), &sys_bedl, "dlopen"); + #endif + #ifdef HAVE_DLLLOAD + errors += lt_dlloader_add (lt_dlloader_next (0), &sys_dll, "dlopen"); #endif #if HAVE_DLD errors += lt_dlloader_add (lt_dlloader_next (0), &sys_dld, "dld");