static void TranslateError
(const char *path, enum dyldErrorSource type, int number)
{
- char errorBuffer[128];
+ char *error;
unsigned int index;
static char *OFIErrorStrings[] =
{
};
#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 */)
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;
}
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()) ;
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()) ;
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)));