correct places that said newSVpv() when they meant newSVpvn()
[p5sagit/p5-mst-13.2.git] / win32 / dl_win32.xs
index d721731..3473520 100644 (file)
@@ -26,6 +26,7 @@ calls.
 
 #include "EXTERN.h"
 #include "perl.h"
+#include "win32.h"
 
 #ifdef PERL_OBJECT
 #define NO_XSLOCKS
@@ -33,6 +34,19 @@ calls.
 
 #include "XSUB.h"
 
+static SV *error_sv;
+
+static char *
+OS_Error_String(CPERLarg)
+{
+ DWORD err = GetLastError();
+ STRLEN len;
+ if (!error_sv)
+  error_sv = newSVpvn("",0);
+ win32_str_os_error(error_sv,err);
+ return SvPV(error_sv,len);
+}
+
 #include "dlutils.c"   /* SaveError() etc      */
 
 static void
@@ -96,7 +110,8 @@ dl_load_file(filename,flags=0)
     DLDEBUG(2,PerlIO_printf(PerlIO_stderr()," libref=%x\n", RETVAL));
     ST(0) = sv_newmortal() ;
     if (RETVAL == NULL)
-       SaveError(PERL_OBJECT_THIS_ "%d",GetLastError()) ;
+       SaveError(PERL_OBJECT_THIS_ "load_file:%s",
+                 OS_Error_String(PERL_OBJECT_THIS)) ;
     else
        sv_setiv( ST(0), (IV)RETVAL);
 
@@ -112,7 +127,8 @@ dl_find_symbol(libhandle, symbolname)
     DLDEBUG(2,PerlIO_printf(PerlIO_stderr(),"  symbolref = %x\n", RETVAL));
     ST(0) = sv_newmortal() ;
     if (RETVAL == NULL)
-       SaveError(PERL_OBJECT_THIS_ "%d",GetLastError()) ;
+       SaveError(PERL_OBJECT_THIS_ "find_symbol:%s",
+                 OS_Error_String(PERL_OBJECT_THIS)) ;
     else
        sv_setiv( ST(0), (IV)RETVAL);