diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2004-02-11 01:15:14 +0200 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2004-03-17 17:58:44 +0000 |
commit | 27d5b266d3ace9bd49a167d34f7350f3768d1326 (patch) | |
tree | 67ceee30c206b7443faf00207d8642d0c1a115a7 /handy.h | |
parent | 165cc789d248f15373a01b5b620e86cdc98e3eab (diff) | |
download | perl-27d5b266d3ace9bd49a167d34f7350f3768d1326.tar.gz |
malloc wrappage
Message-Id: <37BF70DE-5C0E-11D8-B5A1-00039362CB92@iki.fi>
plus change croak to Perl_croak_nocontext to make ithread safe
plus make it conditional on PERL_MALLOC_WRAP (default for blead is on)
p4raw-id: //depot/perl@22517
Diffstat (limited to 'handy.h')
-rw-r--r-- | handy.h | 32 |
1 files changed, 32 insertions, 0 deletions
@@ -583,6 +583,36 @@ hopefully catches attempts to access uninitialized memory. #define NEWSV(x,len) newSV(len) +#ifdef PERL_MALLOC_WRAP +#define MEM_WRAP_CHECK(n,t) \ + (void)((n)>((MEM_SIZE)~0)/sizeof(t)?(Perl_croak_nocontext(PL_memory_wrap),0):0) +#define MEM_WRAP_CHECK_1(n,t,a) \ + (void)((n)>((MEM_SIZE)~0)/sizeof(t)?(Perl_croak_nocontext(a),0):0) +#define MEM_WRAP_CHECK_2(n,t,a,b) \ + (void)((n)>((MEM_SIZE)~0)/sizeof(t)?(Perl_croak_nocontext(a,b),0):0) + +#define New(x,v,n,t) (v = (MEM_WRAP_CHECK(n,t), (t*)safemalloc((MEM_SIZE)((n)*sizeof(t))))) +#define Newc(x,v,n,t,c) (v = (MEM_WRAP_CHECK(n,t), (c*)safemalloc((MEM_SIZE)((n)*sizeof(t))))) +#define Newz(x,v,n,t) (v = (MEM_WRAP_CHECK(n,t), (t*)safemalloc((MEM_SIZE)((n)*sizeof(t))))), \ + memzero((char*)(v), (n)*sizeof(t)) +#define Renew(v,n,t) \ + (v = (MEM_WRAP_CHECK(n,t), (t*)saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))) +#define Renewc(v,n,t,c) \ + (v = (MEM_WRAP_CHECK(n,t), (c*)saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))) +#define Safefree(d) safefree((Malloc_t)(d)) + +#define Move(s,d,n,t) (MEM_WRAP_CHECK(n,t), (void)memmove((char*)(d),(char*)(s), (n) * sizeof(t))) +#define Copy(s,d,n,t) (MEM_WRAP_CHECK(n,t), (void)memcpy((char*)(d),(char*)(s), (n) * sizeof(t))) +#define Zero(d,n,t) (MEM_WRAP_CHECK(n,t), (void)memzero((char*)(d), (n) * sizeof(t))) + +#define Poison(d,n,t) (MEM_WRAP_CHECK(n,t), (void)memset((char*)(d), 0xAB, (n) * sizeof(t))) + +#else + +#define MEM_WRAP_CHECK(n,t) 0 +#define MEM_WRAP_CHECK_1(n,t,a) 0 +#define MEM_WRAP_CHECK_2(n,t,a,b) 0 + #define New(x,v,n,t) (v = (t*)safemalloc((MEM_SIZE)((n)*sizeof(t)))) #define Newc(x,v,n,t,c) (v = (c*)safemalloc((MEM_SIZE)((n)*sizeof(t)))) #define Newz(x,v,n,t) (v = (t*)safemalloc((MEM_SIZE)((n)*sizeof(t)))), \ @@ -599,6 +629,8 @@ hopefully catches attempts to access uninitialized memory. #define Poison(d,n,t) (void)memset((char*)(d), 0xAB, (n) * sizeof(t)) +#endif + #else /* lint */ #define New(x,v,n,s) (v = Null(s *)) |