summaryrefslogtreecommitdiff
path: root/ext/DynaLoader
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2002-05-16 22:54:36 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2002-05-16 22:54:36 +0000
commit14f9eb14d6f099e5d7b4e2e185fd86af1f131412 (patch)
tree3aaab8f949809d2cbc7a58b56168628082d6b143 /ext/DynaLoader
parent36d184568293ae9727e0112adb7307e78e8fef64 (diff)
downloadperl-14f9eb14d6f099e5d7b4e2e185fd86af1f131412.tar.gz
Purify: dl_last_error was leaking.
p4raw-id: //depot/perl@16638
Diffstat (limited to 'ext/DynaLoader')
-rw-r--r--ext/DynaLoader/dlutils.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/ext/DynaLoader/dlutils.c b/ext/DynaLoader/dlutils.c
index 620d31b21e..2bd73ad817 100644
--- a/ext/DynaLoader/dlutils.c
+++ b/ext/DynaLoader/dlutils.c
@@ -14,7 +14,7 @@
#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));
}