/*
 * (c) Copyright 1990 Conor P. Cahill (uunet!virtech!cpcahil).  
 * You may copy, distribute, and use this software as long as this
 * copyright statement is not removed.
 */
/*
 * $Id: malloc.h,v 1.1 1992/01/24 03:29:06 dvadura Exp $
 */
struct mlist
{
	struct mlist	* next;			/* next entry in chain	*/
	struct mlist	* prev;			/* prev entry in chain	*/
	int	 	  flag;			/* inuse flag		*/
	unsigned int	  r_size;		/* requested size	*/
	union
	{
		unsigned int	  size;		/* actual size		*/
		double		  unused_just_for_alignment;
	} s;
	char		  data[4];
};

#define M_SIZE		((int)(char *)((struct mlist *)0)->data)
#define M_RND		0x08

#define M_INUSE 	0x01
#define M_MAGIC 	0x03156100

#define M_BLOCKSIZE	(1024*8)

#define M_FILL		'\01'
#define M_FREE_FILL	'\02'

#define M_ROUNDUP(size)	{\
				if( size & (M_RND-1) ) \
				{ \
					size &= ~(M_RND-1); \
					size += M_RND; \
				} \
			}

/*
 * Malloc warning/fatal error handler defines...
 */
#define M_HANDLE_DUMP	0x80  /* 128 */
#define M_HANDLE_IGNORE	0
#define M_HANDLE_ABORT	1
#define M_HANDLE_EXIT	2
#define M_HANDLE_CORE	3
	
/*
 * Mallopt commands and defaults
 */

#define MALLOC_WARN	1		/* set malloc warning handling	*/
#define MALLOC_FATAL	2		/* set malloc fatal handling	*/
#define MALLOC_ERRFILE	3		/* specify malloc error file	*/
#define MALLOC_CKCHAIN	4		/* turn on chain checking	*/
union malloptarg
{
	int	  i;
	char	* str;
};

/*
 * Malloc warning/fatal error codes
 */

#define M_CODE_CHAIN_BROKE	1	/* malloc chain is broken	*/
#define M_CODE_NO_END		2	/* chain end != endptr		*/
#define M_CODE_BAD_PTR		3	/* pointer not in malloc area	*/
#define M_CODE_BAD_MAGIC	4	/* bad magic number in header	*/
#define M_CODE_BAD_CONNECT	5	/* chain poingers corrupt	*/
#define M_CODE_OVERRUN		6	/* data overrun in malloc seg	*/
#define M_CODE_REUSE		7	/* reuse of freed area		*/
#define M_CODE_NOT_INUSE	8	/* pointer is not in use	*/
#define M_CODE_NOMORE_MEM	9	/* no more memory available	*/
#define M_CODE_OUTOF_BOUNDS	10	/* gone beyound bounds 		*/

void malloc_warning();
void malloc_fatal();
void malloc_check_data();
void malloc_check_str();
void malloc_verify();

/*
 * $Log: malloc.h,v $
 * Revision 1.1  1992/01/24  03:29:06  dvadura
 * dmake Version 3.8, Initial revision
 *
 * Revision 1.4  90/08/29  22:23:38  cpcahil
 * fixed mallopt to use a union as an argument.
 * 
 * Revision 1.3  90/05/11  11:04:10  cpcahil
 * took out some extraneous lines
 * 
 * Revision 1.2  90/05/11  00:13:09  cpcahil
 * added copyright statment
 * 
 * Revision 1.1  90/02/23  07:09:03  cpcahil
 * Initial revision
 * 
 */
