This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Correct tests for B::{cstring,perlstring,cchar}
[perl5.git] / malloc.c
index bfa4cec..adfa23a 100644 (file)
--- a/malloc.c
+++ b/malloc.c
@@ -3,7 +3,9 @@
  */
 
 /*
- * "'The Chamber of Records,' said Gimli. 'I guess that is where we now stand.'"
+ * 'The Chamber of Records,' said Gimli.  'I guess that is where we now stand.'
+ *
+ *     [p.321 of _The Lord of the Rings_, II/v: "The Bridge of Khazad-Dûm"]
  */
 
 /* This file contains Perl's own implementation of the malloc library.
 #define MIN_BUC_POW2 (sizeof(void*) > 4 ? 3 : 2) /* Allow for 4-byte arena. */
 #define MIN_BUCKET (MIN_BUC_POW2 * BUCKETS_PER_POW2)
 
-#if !(defined(I286) || defined(atarist) || defined(__MINT__))
+#if !(defined(I286) || defined(atarist))
        /* take 2k unless the block is bigger than that */
 #  define LOG_OF_MIN_ARENA 11
 #else
 #define u_short unsigned short
 
 /* 286 and atarist like big chunks, which gives too much overhead. */
-#if (defined(RCHECK) || defined(I286) || defined(atarist) || defined(__MINT__)) && defined(PACK_MALLOC)
+#if (defined(RCHECK) || defined(I286) || defined(atarist)) && defined(PACK_MALLOC)
 #  undef PACK_MALLOC
 #endif 
 
@@ -970,7 +972,7 @@ static const char bucket_of[] =
 
 static void    morecore        (register int bucket);
 #  if defined(DEBUGGING)
-static void    botch           (char *diag, char *s, char *file, int line);
+static void    botch           (const char *diag, const char *s, const char *file, int line);
 #  endif
 static void    add_to_chain    (void *p, MEM_SIZE size, MEM_SIZE chip);
 static void*   get_from_chain  (MEM_SIZE size);
@@ -1281,7 +1283,7 @@ emergency_sbrk(MEM_SIZE size)
 #endif /* defined PERL_EMERGENCY_SBRK */
 
 static void
-write2(char *mess)
+write2(const char *mess)
 {
   write(2, mess, strlen(mess));
 }
@@ -1291,13 +1293,13 @@ write2(char *mess)
 #define        ASSERT(p,diag)   if (!(p)) botch(diag,STRINGIFY(p),__FILE__,__LINE__);
 
 static void
-botch(char *diag, char *s, char *file, int line)
+botch(const char *diag, const char *s, const char *file, int line)
 {
     dVAR;
+    dTHX;
     if (!(PERL_MAYBE_ALIVE && PERL_GET_THX))
        goto do_write;
     else {
-       dTHX;
        if (PerlIO_printf(PerlIO_stderr(),
                          "assertion botched (%s?): %s %s:%d\n",
                          diag, s, file, line) != 0) {
@@ -1732,7 +1734,7 @@ getpages(MEM_SIZE needed, int *nblksp, int bucket)
        /* Second, check alignment. */
        slack = 0;
 
-#if !defined(atarist) && !defined(__MINT__) /* on the atari we dont have to worry about this */
+#if !defined(atarist) /* on the atari we dont have to worry about this */
 #  ifndef I286         /* The sbrk(0) call on the I286 always returns the next segment */
        /* WANTED_ALIGNMENT may be more than NEEDED_ALIGNMENT, but this may
           improve performance of memory access. */
@@ -1741,7 +1743,7 @@ getpages(MEM_SIZE needed, int *nblksp, int bucket)
            add += slack;
        }
 #  endif
-#endif /* !atarist && !MINT */
+#endif /* !atarist */
                
        if (add) {
            DEBUG_m(PerlIO_printf(Perl_debug_log, 
@@ -2054,10 +2056,10 @@ Perl_mfree(Malloc_t where)
 #ifdef PERL_CORE
                {
                    dTHX;
-                   if (!PERL_IS_ALIVE || !PL_curcop || ckWARN_d(WARN_MALLOC))
-                       Perl_warner(aTHX_ packWARN(WARN_MALLOC), "%s free() ignored (RMAGIC, PERL_CORE)",
-                                   ovp->ov_rmagic == RMAGIC - 1 ?
-                                   "Duplicate" : "Bad");
+                   if (!PERL_IS_ALIVE || !PL_curcop)
+                       Perl_ck_warner_d(aTHX_ packWARN(WARN_MALLOC), "%s free() ignored (RMAGIC, PERL_CORE)",
+                                        ovp->ov_rmagic == RMAGIC - 1 ?
+                                        "Duplicate" : "Bad");
                }
 #else
                warn("%s free() ignored (RMAGIC)",
@@ -2067,8 +2069,8 @@ Perl_mfree(Malloc_t where)
 #ifdef PERL_CORE
                {
                    dTHX;
-                   if (!PERL_IS_ALIVE || !PL_curcop || ckWARN_d(WARN_MALLOC))
-                       Perl_warner(aTHX_ packWARN(WARN_MALLOC), "%s", "Bad free() ignored (PERL_CORE)");
+                   if (!PERL_IS_ALIVE || !PL_curcop)
+                       Perl_ck_warner_d(aTHX_ packWARN(WARN_MALLOC), "%s", "Bad free() ignored (PERL_CORE)");
                }
 #else
                warn("%s", "Bad free() ignored");
@@ -2161,11 +2163,11 @@ Perl_realloc(void *mp, size_t nbytes)
 #ifdef PERL_CORE
                {
                    dTHX;
-                   if (!PERL_IS_ALIVE || !PL_curcop || ckWARN_d(WARN_MALLOC))
-                       Perl_warner(aTHX_ packWARN(WARN_MALLOC), "%srealloc() %signored",
-                                   (ovp->ov_rmagic == RMAGIC - 1 ? "" : "Bad "),
-                                   ovp->ov_rmagic == RMAGIC - 1
-                                   ? "of freed memory " : "");
+                   if (!PERL_IS_ALIVE || !PL_curcop)
+                       Perl_ck_warner_d(aTHX_ packWARN(WARN_MALLOC), "%srealloc() %signored",
+                                        (ovp->ov_rmagic == RMAGIC - 1 ? "" : "Bad "),
+                                        ovp->ov_rmagic == RMAGIC - 1
+                                        ? "of freed memory " : "");
                }
 #else
                warn2("%srealloc() %signored",
@@ -2176,9 +2178,9 @@ Perl_realloc(void *mp, size_t nbytes)
 #ifdef PERL_CORE
                {
                    dTHX;
-                   if (!PERL_IS_ALIVE || !PL_curcop || ckWARN_d(WARN_MALLOC))
-                       Perl_warner(aTHX_ packWARN(WARN_MALLOC), "%s",
-                                   "Bad realloc() ignored");
+                   if (!PERL_IS_ALIVE || !PL_curcop)
+                       Perl_ck_warner_d(aTHX_ packWARN(WARN_MALLOC), "%s",
+                                        "Bad realloc() ignored");
                }
 #else
                warn("%s", "Bad realloc() ignored");
@@ -2534,7 +2536,7 @@ Perl_dump_mstats(pTHX_ const char *s)
 
 #ifdef USE_PERL_SBRK
 
-#   if defined(__MACHTEN_PPC__) || defined(NeXT) || defined(__NeXT__) || defined(PURIFY)
+#   if defined(NeXT) || defined(__NeXT__) || defined(PURIFY)
 #      define PERL_SBRK_VIA_MALLOC
 #   endif