X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=handy.h;h=c16ba471ff74dfad5aa15d69ce78e9a7430767a6;hb=0773b1f011791ecd1735dad376fcc533a738a2f0;hp=be0454b22cf43e4fc3a753b8fa4863aca7ca28a3;hpb=be3c0a43e1e6b1244032726df02a3ab450a3c4be;p=p5sagit%2Fp5-mst-13.2.git diff --git a/handy.h b/handy.h index be0454b..c16ba47 100644 --- a/handy.h +++ b/handy.h @@ -174,7 +174,11 @@ typedef U64TYPE U64; #define I32_MAX INT32_MAX #define I32_MIN INT32_MIN -#define U32_MAX UINT32_MAX +#ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */ +# define U32_MAX UINT32_MAX +#else +# define U32_MAX 4294967295U +#endif #define U32_MIN UINT32_MIN #else @@ -456,7 +460,10 @@ Converts the specified character to lowercase. #define isBLANK_LC_uni(c) isBLANK(c) /* could be wrong */ #define isALNUM_utf8(p) is_utf8_alnum(p) -#define isIDFIRST_utf8(p) is_utf8_idfirst(p) +/* The ID_Start of Unicode is quite limiting: it assumes a L-class + * character (meaning that you cannot have, say, a CJK character). + * Instead, let's allow ID_Continue but not digits. */ +#define isIDFIRST_utf8(p) (is_utf8_idcont(p) && !is_utf8_digit(p)) #define isALPHA_utf8(p) is_utf8_alpha(p) #define isSPACE_utf8(p) is_utf8_space(p) #define isDIGIT_utf8(p) is_utf8_digit(p) @@ -509,18 +516,6 @@ typedef U16 line_t; /* - XXX LEAKTEST doesn't really work in perl5. There are direct calls to - safemalloc() in the source, so LEAKTEST won't pick them up. - (The main "offenders" are extensions.) - Further, if you try LEAKTEST, you'll also end up calling - Safefree, which might call safexfree() on some things that weren't - malloced with safexmalloc. The correct "fix" to this, if anyone - is interested, is to ensure that all calls go through the New and - Renew macros. - --Andy Dougherty August 1996 -*/ - -/* =head1 SV Manipulation Functions =for apidoc Am|SV*|NEWSV|int id|STRLEN len @@ -571,15 +566,17 @@ destination, C is the number of items, and C is the type. =for apidoc Am|void|StructCopy|type src|type dest|type This is an architecture-independent macro to copy one structure to another. -=cut -*/ +=for apidoc Am|void|Poison|void* dest|int nitems|type + +Fill up memory with a pattern (byte 0xAB over and over again) that +hopefully catches attempts to access uninitialized memory. + +=cut */ #ifndef lint #define NEWSV(x,len) newSV(len) -#ifndef LEAKTEST - #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)))), \ @@ -590,32 +587,12 @@ This is an architecture-independent macro to copy one structure to another. (v = (c*)saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t)))) #define Safefree(d) safefree((Malloc_t)(d)) -#else /* LEAKTEST */ - -#define New(x,v,n,t) (v = (t*)safexmalloc((x),(MEM_SIZE)((n)*sizeof(t)))) -#define Newc(x,v,n,t,c) (v = (c*)safexmalloc((x),(MEM_SIZE)((n)*sizeof(t)))) -#define Newz(x,v,n,t) (v = (t*)safexmalloc((x),(MEM_SIZE)((n)*sizeof(t)))), \ - memzero((char*)(v), (n)*sizeof(t)) -#define Renew(v,n,t) \ - (v = (t*)safexrealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t)))) -#define Renewc(v,n,t,c) \ - (v = (c*)safexrealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t)))) -#define Safefree(d) safexfree((Malloc_t)(d)) - -#define MAXXCOUNT 1400 -#define MAXY_SIZE 80 -#define MAXYCOUNT 16 /* (MAXY_SIZE/4 + 1) */ -extern long xcount[MAXXCOUNT]; -extern long lastxcount[MAXXCOUNT]; -extern long xycount[MAXXCOUNT][MAXYCOUNT]; -extern long lastxycount[MAXXCOUNT][MAXYCOUNT]; - -#endif /* LEAKTEST */ - #define Move(s,d,n,t) (void)memmove((char*)(d),(char*)(s), (n) * sizeof(t)) #define Copy(s,d,n,t) (void)memcpy((char*)(d),(char*)(s), (n) * sizeof(t)) #define Zero(d,n,t) (void)memzero((char*)(d), (n) * sizeof(t)) +#define Poison(d,n,t) (void)memset((char*)(d), 0xAB, (n) * sizeof(t)) + #else /* lint */ #define New(x,v,n,s) (v = Null(s *)) @@ -625,6 +602,7 @@ extern long lastxycount[MAXXCOUNT][MAXYCOUNT]; #define Move(s,d,n,t) #define Copy(s,d,n,t) #define Zero(d,n,t) +#define Poison(d,n,t) #define Safefree(d) (d) = (d) #endif /* lint */