*
* I did change all malloc's, free's, strdup's, calloc's to use the perl
* equilvant. I also removed some stuff we will not need. Call fini()
- * on statup... It can probably be trimmed more.
+ * on startup... It can probably be trimmed more.
*/
#define PERLIO_NOT_STDIO 0
int msgsiz;
char *msg;
-#ifdef USE_5005THREADS
- char *buf = malloc(BUFSIZ);
-
- if (buf == 0)
- return 0;
- if (strerror_r(err, buf, BUFSIZ) == 0)
- msg = buf;
- else
- msg = strerror_r_failed;
- msgsiz = strlen(msg);
- if (strsiz + msgsiz < BUFSIZ)
- strcat(str, msg);
- free(buf);
-#else
-# ifdef USE_ITHREADS
dTHX;
-# endif
if ((msg = strerror(err)) == 0)
msg = strerror_failed;
msgsiz = strlen(msg); /* Note msg = buf and free() above. */
if (strsiz + msgsiz < BUFSIZ) /* Do not move this after #endif. */
strcat(str, msg);
-#endif
return str;
}
int msgsiz;
char *msg;
-#ifdef USE_5005THREADS
- char *buf = malloc(BUFSIZ);
-
- if (buf == 0)
- return 0;
- if (strerror_r(err, buf, BUFSIZ) == 0)
- msg = buf;
- else
- msg = strerror_r_failed;
- msgsiz = strlen(msg);
- if (msgsiz < BUFSIZ)
- strcpy(str, msg);
- free(buf);
-#else
-# ifdef USE_ITHREADS
dTHX;
-#endif
if ((msg = strerror(err)) == 0)
msg = strerror_failed;
msgsiz = strlen(msg); /* Note msg = buf and free() above. */
if (msgsiz < BUFSIZ) /* Do not move this after #endif. */
strcpy(str, msg);
-#endif
return str;
}
mp->refCnt++;
return mp;
}
- Newz(1000,mp,1,Module);
+ Newxz(mp,1,Module);
if (mp == NULL) {
dl_errvalid++;
strcpy(dl_errbuf, "Newz: ");
continue;
mp->nExports++;
}
- Newz(1001, mp->exports, mp->nExports, Export);
+ Newxz(mp->exports, mp->nExports, Export);
if (mp->exports == NULL) {
dl_errvalid++;
strcpy(dl_errbuf, "readExports: ");
dl_install_xsub(perl_name, symref, filename="$Package")
char * perl_name
void * symref
- char * filename
+ const char * filename
CODE:
DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_install_xsub(name=%s, symref=%x)\n",
perl_name, symref));
- ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name,
- (void(*)(pTHX_ CV *))symref,
- filename)));
+ ST(0) = sv_2mortal(newRV((SV*)newXS_flags(perl_name,
+ (void(*)(pTHX_ CV *))symref,
+ filename, NULL,
+ XS_DYNAMIC_FILENAME)));
char *
OUTPUT:
RETVAL
+#if defined(USE_ITHREADS)
+
+void
+CLONE(...)
+ CODE:
+ MY_CXT_CLONE;
+
+ /* MY_CXT_CLONE just does a memcpy on the whole structure, so to avoid
+ * using Perl variables that belong to another thread, we create our
+ * own for this thread.
+ */
+ MY_CXT.x_dl_last_error = newSVpvn("", 0);
+
+#endif
+
# end.