stop the cargo cult of (MEM_SIZE)~0
Jarkko Hietaniemi [Tue, 27 Mar 2007 15:07:52 +0000 (18:07 +0300)]
Message-Id: <200703271207.l2RC7qOC443040@kosh.hut.fi>

p4raw-id: //depot/perl@30774

handy.h
pp.c
util.c

diff --git a/handy.h b/handy.h
index 353060a..72d7122 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -685,16 +685,18 @@ PoisonWith(0xEF) for catching access to freed memory.
 #define NEWSV(x,len)   newSV(len)
 #endif
 
+#define MEM_SIZE_MAX ((MEM_SIZE)~0)
+
 /* The +0.0 in MEM_WRAP_CHECK_ is an attempt to foil
  * overly eager compilers that will bleat about e.g.
  * (U16)n > (size_t)~0/sizeof(U16) always being false. */
 #ifdef PERL_MALLOC_WRAP
 #define MEM_WRAP_CHECK(n,t) MEM_WRAP_CHECK_1(n,t,PL_memory_wrap)
 #define MEM_WRAP_CHECK_1(n,t,a) \
-       (void)(sizeof(t) > 1 && ((MEM_SIZE)(n)+0.0) > ((MEM_SIZE)~0)/sizeof(t) && (Perl_croak_nocontext(a),0))
+       (void)(sizeof(t) > 1 && ((MEM_SIZE)(n)+0.0) > MEM_SIZE_MAX/sizeof(t) && (Perl_croak_nocontext(a),0))
 #define MEM_WRAP_CHECK_(n,t) MEM_WRAP_CHECK(n,t),
 
-#define PERL_STRLEN_ROUNDUP(n) ((void)(((n) > (MEM_SIZE)~0 - 2 * PERL_STRLEN_ROUNDUP_QUANTUM) ? (Perl_croak_nocontext(PL_memory_wrap),0):0),((n-1+PERL_STRLEN_ROUNDUP_QUANTUM)&~((MEM_SIZE)PERL_STRLEN_ROUNDUP_QUANTUM-1)))
+#define PERL_STRLEN_ROUNDUP(n) ((void)(((n) > MEM_SIZE_MAX - 2 * PERL_STRLEN_ROUNDUP_QUANTUM) ? (Perl_croak_nocontext(PL_memory_wrap),0):0),((n-1+PERL_STRLEN_ROUNDUP_QUANTUM)&~((MEM_SIZE)PERL_STRLEN_ROUNDUP_QUANTUM-1)))
 
 #else
 
diff --git a/pp.c b/pp.c
index 173f81d..00aa6e4 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -1537,7 +1537,7 @@ PP(pp_repeat)
                SvCUR_set(TARG, 0);
            else {
                const STRLEN max = (UV)count * len;
-               if (len > ((MEM_SIZE)~0)/count)
+               if (len > MEM_SIZE_MAX / count)
                     Perl_croak(aTHX_ oom_string_extend);
                MEM_WRAP_CHECK_1(max, char, oom_string_extend);
                SvGROW(TARG, max + 1);
diff --git a/util.c b/util.c
index 8205aa8..f670bb8 100644 (file)
--- a/util.c
+++ b/util.c
@@ -261,12 +261,12 @@ Perl_safesyscalloc(MEM_SIZE count, MEM_SIZE size)
     MEM_SIZE total_size = 0;
 
     /* Even though calloc() for zero bytes is strange, be robust. */
-    if (size && (count <= (MEM_SIZE)~0 / size))
+    if (size && (count <= MEM_SIZE_MAX / size))
        total_size = size * count;
     else
        Perl_croak_nocontext(PL_memory_wrap);
 #ifdef PERL_TRACK_MEMPOOL
-    if (sTHX <= (MEM_SIZE)~0 - (MEM_SIZE)total_size)
+    if (sTHX <= MEM_SIZE_MAX - (MEM_SIZE)total_size)
        total_size += sTHX;
     else
        Perl_croak_nocontext(PL_memory_wrap);