Re: Shared libperl.so and build issues
[p5sagit/p5-mst-13.2.git] / ext / DynaLoader / dlutils.c
index f15cf73..2bd73ad 100644 (file)
 #ifndef XS_VERSION
 #  define XS_VERSION "0"
 #endif
-#define MY_CXT_KEY "DynaLoader::_guts"##XS_VERSION
+#define MY_CXT_KEY "DynaLoader::_guts" XS_VERSION
 
 typedef struct {
-    char *     x_dl_last_error;        /* pointer to allocated memory for
+    SV*                x_dl_last_error;        /* pointer to allocated memory for
                                           last error message */
     int                x_dl_nonlazy;           /* flag for immediate rather than lazy
                                           linking (spots unresolved symbol) */
@@ -31,7 +31,7 @@ typedef struct {
 
 START_MY_CXT
 
-#define dl_last_error  (MY_CXT.x_dl_last_error)
+#define dl_last_error  (SvPVX(MY_CXT.x_dl_last_error))
 #define dl_nonlazy     (MY_CXT.x_dl_nonlazy)
 #ifdef DL_LOADONCEONLY
 #define dl_loaded_files        (MY_CXT.x_dl_loaded_files)
@@ -85,7 +85,7 @@ dl_generic_private_init(pTHX) /* called by dl_*.xs dl_private_init() */
     char *perl_dl_nonlazy;
     MY_CXT_INIT;
 
-    dl_last_error = NULL;
+    MY_CXT.x_dl_last_error = newSVpvn("", 0);
     dl_nonlazy = 0;
 #ifdef DL_LOADONCEONLY
     dl_loaded_files = Nullhv;
@@ -129,14 +129,8 @@ SaveError(pTHX_ char* pat, ...)
     message = SvPV(msv,len);
     len++;             /* include terminating null char */
 
-    /* Allocate some memory for the error message */
-    if (dl_last_error)
-        dl_last_error = (char*)saferealloc(dl_last_error, len);
-    else
-        dl_last_error = (char*)safemalloc(len);
-
     /* Copy message into dl_last_error (including terminating null char) */
-    strncpy(dl_last_error, message, len) ;
+    sv_setpvn(MY_CXT.x_dl_last_error, message, len) ;
     DLDEBUG(2,PerlIO_printf(Perl_debug_log, "DynaLoader: stored error msg '%s'\n",dl_last_error));
 }