X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=pdf2swf%2Fxpdf%2Fgmem.c;h=a0f2cf540e05d0e93e6e18278f0949ac8174503e;hb=c26ca847941ca0acfc9f3b4bdc519d904ba09a39;hp=cac386bc8aab161c555d87dfacd523efe6e7e92f;hpb=fc554a43712b76d16b41ec77dd311b4a78b1ef6b;p=swftools.git diff --git a/pdf2swf/xpdf/gmem.c b/pdf2swf/xpdf/gmem.c index cac386b..a0f2cf5 100644 --- a/pdf2swf/xpdf/gmem.c +++ b/pdf2swf/xpdf/gmem.c @@ -3,9 +3,10 @@ * * Memory routines with out-of-memory checking. * - * Copyright 1996 Derek B. Noonburg + * Copyright 1996-2003 Glyph & Cog, LLC */ +#include #include #include #include @@ -24,9 +25,9 @@ typedef struct _GMemHdr { #define gMemTrlSize (sizeof(long)) #if gmemTrlSize==8 -#define gMemDeadVal 0xdeadbeefdeadbeef +#define gMemDeadVal 0xdeadbeefdeadbeefUL #else -#define gMemDeadVal 0xdeadbeef +#define gMemDeadVal 0xdeadbeefUL #endif /* round data size so trailer will be aligned */ @@ -49,6 +50,7 @@ static GMemHdr *gMemList[gMemNLists] = { static int gMemIndex = 0; static int gMemAlloc = 0; +static int gMemInUse = 0; #endif /* DEBUG_MEM */ @@ -59,7 +61,7 @@ void *gmalloc(int size) { GMemHdr *hdr; void *data; int lst; - long *trl, *p; + unsigned long *trl, *p; if (size == 0) return NULL; @@ -70,14 +72,15 @@ void *gmalloc(int size) { } hdr = (GMemHdr *)mem; data = (void *)(mem + gMemHdrSize); - trl = (long *)(mem + gMemHdrSize + size1); + trl = (unsigned long *)(mem + gMemHdrSize + size1); hdr->size = size; hdr->index = gMemIndex++; lst = ((int)hdr >> gMemListShift) & gMemListMask; hdr->next = gMemList[lst]; gMemList[lst] = hdr; ++gMemAlloc; - for (p = (long *)data; p <= trl; ++p) + gMemInUse += size; + for (p = (unsigned long *)data; p <= trl; ++p) *p = gMemDeadVal; return data; #else @@ -134,13 +137,35 @@ void *grealloc(void *p, int size) { #endif } +void *gmallocn(int nObjs, int objSize) { + int n; + + n = nObjs * objSize; + if (objSize == 0 || n / objSize != nObjs) { + fprintf(stderr, "Bogus memory allocation size\n"); + exit(1); + } + return gmalloc(n); +} + +void *greallocn(void *p, int nObjs, int objSize) { + int n; + + n = nObjs * objSize; + if (objSize == 0 || n / objSize != nObjs) { + fprintf(stderr, "Bogus memory allocation size\n"); + exit(1); + } + return grealloc(p, n); +} + void gfree(void *p) { #ifdef DEBUG_MEM int size; GMemHdr *hdr; GMemHdr *prevHdr, *q; int lst; - long *trl, *clr; + unsigned long *trl, *clr; if (p) { hdr = (GMemHdr *)((char *)p - gMemHdrSize); @@ -155,13 +180,14 @@ void gfree(void *p) { else gMemList[lst] = hdr->next; --gMemAlloc; + gMemInUse -= hdr->size; size = gMemDataSize(hdr->size); - trl = (long *)((char *)hdr + gMemHdrSize + size); + trl = (unsigned long *)((char *)hdr + gMemHdrSize + size); if (*trl != gMemDeadVal) { fprintf(stderr, "Overwrite past end of block %d at address %p\n", hdr->index, p); } - for (clr = (long *)hdr; clr <= trl; ++clr) + for (clr = (unsigned long *)hdr; clr <= trl; ++clr) *clr = gMemDeadVal; free(hdr); } else {