X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperlclib.pod;h=e89a67a14092f4acc7f3ca36331884066c535ee2;hb=10ac92784f49d4a1fe54cc1ed7d05f0d3b2a2f29;hp=861bf5e3f352b246c18393b91f39c84f1895b049;hpb=2826e23d06eb57e0799af5f9f67c55c5975ba0e5;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perlclib.pod b/pod/perlclib.pod index 861bf5e..e89a67a 100644 --- a/pod/perlclib.pod +++ b/pod/perlclib.pod @@ -97,15 +97,17 @@ There is no equivalent to C; one should use C instead: =head2 Memory Management and String Handling - Instead Of: Use: - - t* p = malloc(n) New(id, p, n, t) - t* p = calloc(n, s) Newz(id, p, n, t) - p = realloc(p, n) Renew(p, n, t) - memcpy(dst, src, n) Copy(src, dst, n, t) - memmove(dst, src, n) Move(src, dst, n, t) - memcpy/*(struct foo *) StructCopy(src, dst, t) - free(p) Safefree(p) + Instead Of: Use: + + t* p = malloc(n) New(id, p, n, t) + t* p = calloc(n, s) Newz(id, p, n, t) + p = realloc(p, n) Renew(p, n, t) + memcpy(dst, src, n) Copy(src, dst, n, t) + memmove(dst, src, n) Move(src, dst, n, t) + memcpy/*(struct foo *) StructCopy(src, dst, t) + memset(dst, 0, n * sizeof(t)) Zero(dst, n, t) + memzero(dst, 0) Zero(dst, n, char) + free(p) Safefree(p) strdup(p) savepv(p) strndup(p, n) savepvn(p, n) (Hey, strndup doesn't exist!) @@ -127,9 +129,19 @@ instead of raw C strings: strncat(dt, src) sv_catpvn(sv, s) sprintf(s, fmt, ...) sv_setpvf(sv, fmt, ...) -Note also the existence of C and C, combining +Note also the existence of C and C, combining concatenation with formatting. +Sometimes instead of zeroing the allocated heap by using Newz() you +should consider "poisoning" the data. This means writing a bit +pattern into it that should be illegal as pointers (and floating point +numbers), and also hopefully surprising enough as integers, so that +any code attempting to use the data without forethought will break +sooner rather than later. Poisoning can be done using the Poison() +macro, which has similar arguments as Zero(): + + Poison(dst, n, t) + =head2 Character Class Tests There are two types of character class tests that Perl implements: one @@ -165,7 +177,7 @@ table, C is a C, and C is a Unicode codepoint. strtol(s, *p, n) Strtol(s, *p, n) strtoul(s, *p, n) Strtoul(s, *p, n) -Notice also the C, C, and C functions in +Notice also the C, C, and C functions in F for converting strings representing numbers in the respective bases into Cs.