PerlIO_read() can return negative.
[p5sagit/p5-mst-13.2.git] / ext / DynaLoader / dl_dyld.xs
index 688e474..2ac2baa 100644 (file)
@@ -41,23 +41,20 @@ been tested on NeXT platforms.
 #include "perl.h"
 #include "XSUB.h"
 
-#define DL_LOADONCEONLY
-
-#include "dlutils.c"   /* SaveError() etc      */
+#include "dlutils.c"   /* for SaveError() etc */
 
 #undef environ
 #undef bool
 #import <mach-o/dyld.h>
 
-static char * dl_last_error = (char *) 0;
-static AV *dl_resolve_using = Nullav;
-
 static char *dlerror()
 {
+    dTHX;
+    dMY_CXT;
     return dl_last_error;
 }
 
-int dlclose(handle) /* stub only */
+static int dlclose(handle) /* stub only */
 void *handle;
 {
     return 0;
@@ -72,13 +69,14 @@ static void TranslateError
     (const char *path, enum dyldErrorSource type, int number)
 {
     dTHX;
+    dMY_CXT;
     char *error;
     unsigned int index;
     static char *OFIErrorStrings[] =
     {
        "%s(%d): Object Image Load Failure\n",
        "%s(%d): Object Image Load Success\n",
-       "%s(%d): Not an recognisable object file\n",
+       "%s(%d): Not a recognisable object file\n",
        "%s(%d): No valid architecture\n",
        "%s(%d): Object image has an invalid format\n",
        "%s(%d): Invalid access (permissions?)\n",
@@ -118,12 +116,13 @@ static char *dlopen(char *path, int mode /* mode is ignored */)
        // 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);
+       NSDestroyObjectFileImage(ofile);
     }
 
     return handle;
 }
 
-void *
+static void *
 dlsym(handle, symbol)
 void *handle;
 char *symbol;
@@ -147,7 +146,6 @@ static void
 dl_private_init(pTHX)
 {
     (void)dl_generic_private_init(aTHX);
-    dl_resolve_using = get_av("DynaLoader::dl_resolve_using", GV_ADDMULTI);
 }
 
 MODULE = DynaLoader     PACKAGE = DynaLoader
@@ -219,7 +217,8 @@ dl_install_xsub(perl_name, symref, filename="$Package")
 char *
 dl_error()
     CODE:
-    RETVAL = LastError ;
+    dMY_CXT;
+    RETVAL = dl_last_error ;
     OUTPUT:
     RETVAL