/*
 * (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.
 */
#include <stdio.h>
#include <fcntl.h>
#include "malloc.h"

/*
 * Function:	mallopt()
 *
 * Purpose:	to set options for the malloc debugging library
 *
 * Arguments:	none
 *
 * Returns:	nothing of any value
 *
 * Narrative:	
 *
 */

#ifndef lint
static
char rcs_hdr[] = "$Id: mallopt.c,v 1.2 2006/07/25 10:09:05 rt Exp $";
#endif

int
mallopt(cmd,value)
	int			  cmd;
	union malloptarg	  value;
{
	int			  i;
	extern int		  malloc_checking;
	extern char		* malloc_data_start;
	extern int		  malloc_errfd;
	extern int		  malloc_fatal_level;
	void			  malloc_init();
	extern int		  malloc_warn_level;
	register char		* s;

	/*
 	 * If not initialized...
	 */
	if( malloc_data_start == (char *) 0)
	{
		malloc_init();
	}


	switch(cmd)
	{
		case MALLOC_WARN:
			malloc_warn_level = value.i;
			break;

		case MALLOC_FATAL:
			malloc_fatal_level = value.i;
			break;

		case MALLOC_CKCHAIN:
			malloc_checking = value.i;
			break;

		case MALLOC_ERRFILE:
			
			i = open(value.str,O_CREAT|O_APPEND|O_WRONLY,0666);
			if( i == -1 )
			{
				(void) write(2,
					  "Unable to open malloc error file: ",
					  (unsigned) 34);
				for(s=value.str; *s; s++)
				{
					/* do nothing */;
				}
				(void) write(2,value.str,
					     (unsigned)(s-value.str));
				(void) write(2,"\n",(unsigned)1);
			}
			else
			{
				if( malloc_errfd != 2 )
				{
					(void) close(malloc_errfd);
				}
				malloc_errfd = i;
			}
			
			break;

		default:
			return(1);
	}

	return(0);
}



syntax highlighted by Code2HTML, v. 0.9.1