diff --git a/src/CHANGELOG b/src/CHANGELOG index 880d4566e..75631d018 100644 --- a/src/CHANGELOG +++ b/src/CHANGELOG @@ -55,10 +55,10 @@ ECL 0.9l-p1: - SI:LOAD-FOREIGN-MODULE now relies on dlopen/LibraryLoad/... to find the foreign libraries. Nevertheless, duplicate libraries are still identified - > (si:load-foreign-module "libm.dylib") - # - > (si:load-foreign-module "/usr/lib/libm.dylib") - # + > (si::load-foreign-module "libm.dylib") + # + > (si::load-foreign-module "/usr/lib/libm.dylib") + # ;;; Local Variables: *** ;;; mode:text *** diff --git a/src/c/ffi.d b/src/c/ffi.d index 2296cb81a..5f4443b61 100644 --- a/src/c/ffi.d +++ b/src/c/ffi.d @@ -418,19 +418,10 @@ si_load_foreign_module(cl_object filename) cl_object output; int i; - filename = si_coerce_to_filename(filename); - #ifdef ECL_THREADS mp_get_lock(1, ecl_symbol_value(@'mp::+load-compile-lock+')); CL_UNWIND_PROTECT_BEGIN { #endif - libraries = cl_core.libraries; - for (i=0; ivector.fillp; i++) - if (cl_stringE(2, libraries->vector.self.t[i]->cblock.name, filename) != Cnil) - { - output = libraries->vector.self.t[i]; - goto OUTPUT; - } output = ecl_library_open(filename, 0); if (output->cblock.handle == NULL) { @@ -447,9 +438,9 @@ OUTPUT: if (type_of(output) == t_codeblock) { output->cblock.locked |= 1; @(return output) - } - else + } else { FEerror("LOAD-FOREIGN-MODULE: Could not load foreign module ~S (Error: ~S)", 2, filename, output); + } #endif } diff --git a/src/c/load.d b/src/c/load.d index bf59cca83..0bdae5e0d 100644 --- a/src/c/load.d +++ b/src/c/load.d @@ -113,6 +113,11 @@ ecl_library_open(cl_object filename, bool force_reload) { cl_object libraries = cl_core.libraries; bool self_destruct = 0; cl_index i; + + /* Coerces to a file name but does not merge with cwd */ + filename = coerce_to_physical_pathname(filename); + filename = cl_namestring(filename); + if (!force_reload) { /* When loading a foreign library, such as a dll or a * so, it cannot contain any executable top level