home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_09_10
/
9n10072c
< prev
next >
Wrap
Text File
|
1991-07-09
|
2KB
|
61 lines
/* These enhanced "wrappers" pad the dynamic object
with a serial number and a trailing fence post.
*/
#ifndef HWRAPPER
#ifdef DEBUG
#define HWRAPPER
#define SIGWORD 0xAA55
int count;
int fcount; /* count free calls separately */
FILE * log;
void my_free(void * tree)
{
char * adjptr;
char * fenceptr;
fenceptr = adjptr = (char *) tree;
adjptr -= sizeof(size_t); /* step back to size */
fenceptr += * ((size_t *) adjptr); /* add size */
adjptr -= sizeof(int);
if (log == NULL) log = fopen("log","w");
fprintf(log,"%p %5.5d free %d\n",adjptr, * ((int * ) adjptr),fcount);
if (*( (unsigned int *) fenceptr) != SIGWORD)
fprintf(log,"%p %5.5d damaged object %d\n",adjptr,
* ((int *) adjptr), fcount);
fcount += 1;
free( (void *) adjptr );
}
void * my_alloc(size_t size)
{
void * temp;
char * adjptr;
size_t lsize;
if (log == NULL) log = fopen("log","w");
lsize = size + sizeof(int) + sizeof(unsigned int) + sizeof(size_t);
temp = (void *) malloc(lsize);
fprintf(log,"%p %5.5d anew\n",temp,count);
adjptr = (char *) temp;
*( (int * ) adjptr ) = count++;
adjptr += sizeof(int);
*( (size_t *) adjptr) = size;
temp = (void *) (adjptr += sizeof(size_t));
adjptr += size;
*( (unsigned int *) adjptr) = SIGWORD;
return temp ;
}
#define malloc(x) my_alloc(x)
#define free(x) my_free(x)
#endif
#endif