AIX patch for hints/aix.sh:
[p5sagit/p5-mst-13.2.git] / ext / DynaLoader / dl_next.xs
index 9e98d56..92d14bc 100644 (file)
@@ -72,7 +72,7 @@ enum dyldErrorSource
 static void TranslateError
     (const char *path, enum dyldErrorSource type, int number)
 {
-    char errorBuffer[128];
+    char *error;
     unsigned int index;
     static char *OFIErrorStrings[] =
     {
@@ -86,25 +86,22 @@ static void TranslateError
     };
 #define NUM_OFI_ERRORS (sizeof(OFIErrorStrings) / sizeof(OFIErrorStrings[0]))
 
-    if ( dl_last_error ) {
-        safefree(dl_last_error);
-    }
     switch (type)
     {
     case OFImage:
        index = number;
        if (index > NUM_OFI_ERRORS - 1)
            index = NUM_OFI_ERRORS - 1;
-       sprintf(errorBuffer, OFIErrorStrings[index], path, number);
+       error = form(OFIErrorStrings[index], path, number);
        break;
 
     default:
-       sprintf(errorBuffer, "%s(%d): Totally unknown error type %d\n",
-           path, number, type);
+       error = form("%s(%d): Totally unknown error type %d\n",
+                    path, number, type);
        break;
     }
-    dl_last_error = safemalloc(strlen(errorBuffer)+1);
-    strcpy(dl_last_error, errorBuffer);
+    safefree(dl_last_error);
+    dl_last_error = savepv(error);
 }
 
 static char *dlopen(char *path, int mode /* mode is ignored */)
@@ -209,13 +206,10 @@ void *handle;
 char *symbol;
 {
     NXStream   *nxerr = OpenError();
-    char       symbuf[1024];
     unsigned long      symref = 0;
 
-    sprintf(symbuf, "_%s", symbol);
-    if (!rld_lookup(nxerr, symbuf, &symref)) {
+    if (!rld_lookup(nxerr, form("_%s", symbol), &symref))
        TransferError(nxerr);
-    }
     CloseError(nxerr);
     return (void*) symref;
 }
@@ -241,13 +235,17 @@ BOOT:
 
 
 void *
-dl_load_file(filename)
+dl_load_file(filename, flags=0)
     char *     filename
-    CODE:
+    int                flags
+    PREINIT:
     int mode = 1;
-    DLDEBUG(1,fprintf(stderr,"dl_load_file(%s):\n", filename));
+    CODE:
+    DLDEBUG(1,PerlIO_printf(PerlIO_stderr(), "dl_load_file(%s,%x):\n", filename,flags));
+    if (flags & 0x01)
+       warn("Can't make loaded symbols global on this platform while loading %s",filename);
     RETVAL = dlopen(filename, mode) ;
-    DLDEBUG(2,fprintf(stderr," libref=%x\n", RETVAL));
+    DLDEBUG(2,PerlIO_printf(PerlIO_stderr(), " libref=%x\n", RETVAL));
     ST(0) = sv_newmortal() ;
     if (RETVAL == NULL)
        SaveError("%s",dlerror()) ;
@@ -261,13 +259,14 @@ dl_find_symbol(libhandle, symbolname)
     char *             symbolname
     CODE:
 #if NS_TARGET_MAJOR >= 4
-    char symbolname_buf[1024];
-    symbolname = dl_add_underscore(symbolname, symbolname_buf);
+    symbolname = form("_%s", symbolname);
 #endif
-    DLDEBUG(2,fprintf(stderr,"dl_find_symbol(handle=%x, symbol=%s)\n",
-           libhandle, symbolname));
+    DLDEBUG(2, PerlIO_printf(PerlIO_stderr(),
+                            "dl_find_symbol(handle=%lx, symbol=%s)\n",
+                            (unsigned long) libhandle, symbolname));
     RETVAL = dlsym(libhandle, symbolname);
-    DLDEBUG(2,fprintf(stderr,"  symbolref = %x\n", RETVAL));
+    DLDEBUG(2, PerlIO_printf(PerlIO_stderr(),
+                            "  symbolref = %lx\n", (unsigned long) RETVAL));
     ST(0) = sv_newmortal() ;
     if (RETVAL == NULL)
        SaveError("%s",dlerror()) ;
@@ -289,7 +288,7 @@ dl_install_xsub(perl_name, symref, filename="$Package")
     void *     symref 
     char *     filename
     CODE:
-    DLDEBUG(2,fprintf(stderr,"dl_install_xsub(name=%s, symref=%x)\n",
+    DLDEBUG(2,PerlIO_printf(PerlIO_stderr(), "dl_install_xsub(name=%s, symref=%x)\n",
            perl_name, symref));
     ST(0)=sv_2mortal(newRV((SV*)newXS(perl_name, (void(*)())symref, filename)));