diff --git a/basis/alien/libraries/libraries-tests.factor b/basis/alien/libraries/libraries-tests.factor new file mode 100644 index 0000000000..13eb134ea9 --- /dev/null +++ b/basis/alien/libraries/libraries-tests.factor @@ -0,0 +1,10 @@ +IN: alien.libraries.tests +USING: alien.libraries alien.syntax tools.test kernel ; + +[ f ] [ DLL" fadfasdfsada" dll-valid? ] unit-test + +[ f ] [ "does not exist" DLL" fadsfasfdsaf" dlsym ] unit-test + +[ ] [ "doesnotexist" dlopen dlclose ] unit-test + +[ "fdasfsf" dll-valid? drop ] must-fail \ No newline at end of file diff --git a/core/alien/alien-tests.factor b/core/alien/alien-tests.factor index d3265f31bb..2d2cec168f 100644 --- a/core/alien/alien-tests.factor +++ b/core/alien/alien-tests.factor @@ -71,10 +71,6 @@ cell 8 = [ [ "( displaced alien )" ] [ 0 B{ 1 2 3 } unparse ] unit-test -[ f ] [ DLL" fadfasdfsada" dll-valid? ] unit-test - -[ f ] [ "does not exist" DLL" fadsfasfdsaf" dlsym ] unit-test - SYMBOL: initialize-test f initialize-test set-global diff --git a/vm/alien.cpp b/vm/alien.cpp index 49afd608ec..13764a8e50 100755 --- a/vm/alien.cpp +++ b/vm/alien.cpp @@ -134,20 +134,21 @@ PRIMITIVE(dlsym) box_alien(ffi_dlsym(NULL,sym)); else { - tagged d = library.as(); - d.untag_check(); + dll *d = untag_check(library.value()); if(d->dll == NULL) dpush(F); else - box_alien(ffi_dlsym(d.untagged(),sym)); + box_alien(ffi_dlsym(d,sym)); } } /* close a native library handle */ PRIMITIVE(dlclose) { - ffi_dlclose(untag_check(dpop())); + dll *d = untag_check(dpop()); + if(d->dll != NULL) + ffi_dlclose(d); } PRIMITIVE(dll_validp) @@ -156,7 +157,7 @@ PRIMITIVE(dll_validp) if(library == F) dpush(T); else - dpush(tagged(library)->dll == NULL ? F : T); + dpush(untag_check(library)->dll == NULL ? F : T); } /* gets the address of an object representing a C pointer */