This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta: Update Pod::Html’s version
[perl5.git] / ext / DynaLoader / dl_aix.xs
index 58dde5f..6d24428 100644 (file)
@@ -8,7 +8,7 @@
  *
  *  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
@@ -179,30 +179,13 @@ char *strerrorcat(char *str, int err) {
     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;
 }
@@ -211,30 +194,13 @@ char *strerrorcpy(char *str, int err) {
     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;
 }
@@ -262,7 +228,7 @@ void *dlopen(char *path, int mode)
                        mp->refCnt++;
                        return mp;
                }
-       Newz(1000,mp,1,Module);
+       Newxz(mp,1,Module);
        if (mp == NULL) {
                dl_errvalid++;
                strcpy(dl_errbuf, "Newz: ");
@@ -602,7 +568,7 @@ static int readExports(ModulePtr mp)
                        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: ");
@@ -778,13 +744,14 @@ void
 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 *
@@ -795,4 +762,19 @@ dl_error()
     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.