Files
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

81 lines
2.8 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/************************************************************************
* _errmalloc / MALLOCDB.C : prints error messages for malloc()
* To be included in OPTION?.lib
*
* 10/83 whf
************************************************************************/
#include <portab.h>
/************************* #include "malloc.h" *****************************/
#define FB_HDR struct hdr /* free block header type */
/* */
FB_HDR { /* mem_block header */
struct hdr *ptr; /* ptr next blk (when freed)*/
UWORD size; /* block size (always) */
UWORD chksize; /* 1's complement of size */
}; /****************************/
/* */
EXTERN FB_HDR _afreebase; /* initial (empty) block */
EXTERN FB_HDR *_aflistptr; /* ptr into ring of freeblks*/
/* */
#define AOFFS 1L /* alignment offset: 0=byte, 1=word, 3=quad */
#define AMASK(c) ((char *)((long)(c) & ~AOFFS)) /* mask alignment bits */
#define AFUDGE 4 /* leeway for passing block as is */
#define ACHUNKS 64 /* chunks to alloc from O.S.*/
/* */
#define ERR_FINDBLOCK 1 /* error in 'findblock()' */
#define ERR_GETMEM 2 /* error in 'getmemory()' */
#define ERR_FREE 3 /* error in 'free()' */
/* */
/*** end of "malloc.h" ******/
/****************************************************************************/
_errmalloc(etype)
int etype; /* type of error */
{
switch(etype)
{
case ERR_FINDBLOCK:
printf("malloc() error: corrupt arena\n");
break;
case ERR_GETMEM:
printf("malloc() error: out of memory\n");
break;
case ERR_FREE:
printf("free() error: pointer was not from malloc()\n");
break;
}
exit(1);
}
/****************************************************************************/
/* malloc_debug(): checks the free list to see if everything is ok. */
/************************************************* */
WORD malloc_debug() /* */
{ /****************************/
REG FB_HDR *cp; /* ptr to current block */
/* */
cp = _aflistptr; /* start search here */
while(1) /* do forever */
{ /* */
if(~(cp->size^cp->chksize)) /* does cp pt to valid blk? */
{ /* no... */
_errmalloc(ERR_FINDBLOCK); /* handle this error */
return FAILURE; /* */
} /* */
cp = cp->ptr; /* move on down the list */
if( cp == _aflistptr ) /* end of list? */
return SUCCESS; /* */
} /* */
} /****************************/
f list? */
return SUCCESS; /* */
} /* */
} /****************************/
f list? */
return SUCCESS; /* */
} /* */
} /****************************/