home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Geek Gadgets 1
/
ADE-1.bin
/
ade-dist
/
dbmalloc-1.14-src.tgz
/
tar.out
/
contrib
/
dbmalloc
/
mallopt.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-09-28
|
6KB
|
275 lines
/*
* (c) Copyright 1990, 1991, 1992 Conor P. Cahill (cpcahil@virtech.vti.com)
*
* This software may be distributed freely as long as the following conditions
* are met:
* * the distribution, or any derivative thereof, may not be
* included as part of a commercial product
* * full source code is provided including this copyright
* * there is no charge for the software itself (there may be
* a minimal charge for the copying or distribution effort)
* * this copyright notice is not modified or removed from any
* source file
*/
#include <stdio.h>
#include <fcntl.h>
#include "mallocin.h"
/*
* Function: dbmallopt()
*
* 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.21 1992/08/22 16:27:13 cpcahil Exp $";
#endif
int
dbmallopt(cmd,value)
int cmd;
union dbmalloptarg * value;
{
int baseflags = 0;
int i;
int newflag = 0;
register char * s;
int turnon = 0;
MALLOC_INIT();
switch(cmd)
{
case MALLOC_CKCHAIN:
newflag = MOPT_CKCHAIN;
turnon = value->i;
break;
case MALLOC_CKDATA:
newflag = MOPT_CKDATA;
turnon = value->i;
break;
case MALLOC_DETAIL:
turnon = value->i;
newflag = MOPT_DETAIL;
break;
case MALLOC_ERRFILE:
if( strcmp(value->str,"-") != 0 )
{
if( malloc_errfd != 2 )
{
close(malloc_errfd);
}
i = open(value->str,
O_CREAT|O_APPEND|O_WRONLY,0666);
if( i == -1 )
{
VOIDCAST write(2,
"Unable to open malloc error file: ",
(WRTSIZE) 34);
for(s=value->str; *s; s++)
{
/* do nothing */;
}
VOIDCAST write(2,value->str,
(WRTSIZE)(s-(value->str)));
VOIDCAST write(2,"\n",(WRTSIZE)1);
}
else
{
if( malloc_errfd != 2 )
{
VOIDCAST close(malloc_errfd);
}
malloc_errfd = i;
}
}
else
{
if( malloc_errfd != 2 )
{
close(malloc_errfd);
}
malloc_errfd = 2;
}
break;
case MALLOC_FATAL:
malloc_fatal_level = value->i;
break;
case MALLOC_FREEMARK:
turnon = value->i;
newflag = MOPT_FREEMARK;
break;
case MALLOC_FILLAREA:
baseflags = MOPT_MFILL | MOPT_FFILL;
switch(value->i)
{
case 1:
newflag = MOPT_DFILL;
break;
case 2:
newflag = MOPT_MFILL | MOPT_DFILL;
break;
case 0:
case 3:
default:
newflag = MOPT_MFILL | MOPT_FFILL
| MOPT_DFILL;
break;
}
turnon = value->i;
/*
* if we ever enable malloc_checking, then we set the
* malloc_check flag to non-zero. Then it can never be
* set back to zero. This is done as a performance
* increase if filling is never enabled.
*/
if( (turnon != 0) && (newflag != 0) )
{
malloc_fill = 1;
}
break;
case MALLOC_LOWFRAG:
newflag = MOPT_LOWFRAG;
turnon = value->i;
break;
case MALLOC_REUSE:
turnon = value->i;
newflag = MOPT_REUSE;
break;
case MALLOC_SHOWLINKS:
turnon = value->i;
newflag = MOPT_SLINKS;
break;
case MALLOC_WARN:
malloc_warn_level = value->i;
break;
case MALLOC_ZERO:
turnon = value->i;
newflag = MOPT_ZERO;
break;
default:
return(1);
}
/*
* if there are base flags, remove all of them so that they will
* not remain on forever.
*/
if( baseflags )
{
malloc_opts &= ~baseflags;
}
/*
* if we have a new option flag, apply it to the options variable.
*/
if( newflag )
{
if( turnon )
{
malloc_opts |= newflag;
}
else
{
malloc_opts &= ~newflag;
}
}
return(0);
}
/*
* $Log: mallopt.c,v $
* Revision 1.21 1992/08/22 16:27:13 cpcahil
* final changes for pl14
*
* Revision 1.20 1992/07/03 00:03:25 cpcahil
* more fixes for pl13, several suggestons from Rich Salz.
*
* Revision 1.19 1992/07/02 15:35:52 cpcahil
* misc cleanups for PL13
*
* Revision 1.18 1992/06/30 13:06:39 cpcahil
* added support for aligned allocations
*
* Revision 1.17 1992/06/22 23:40:10 cpcahil
* many fixes for working on small int systems
*
* Revision 1.16 1992/05/06 04:53:29 cpcahil
* performance enhancments
*
* Revision 1.15 1992/04/15 12:51:06 cpcahil
* fixes per testing of patch 8
*
* Revision 1.14 1992/04/13 03:06:33 cpcahil
* Added Stack support, marking of non-leaks, auto-config, auto-testing
*
* Revision 1.13 1992/03/01 12:42:38 cpcahil
* added support for managing freed areas and fixed doublword bndr problems
*
* Revision 1.12 1992/01/30 12:23:06 cpcahil
* renamed mallocint.h -> mallocin.h
*
* Revision 1.11 1992/01/10 17:28:03 cpcahil
* Added support for overriding void datatype
*
* Revision 1.10 1991/12/31 21:31:26 cpcahil
* changes for patch 6. See CHANGES file for more info
*
* Revision 1.9 1991/12/04 09:23:42 cpcahil
* several performance enhancements including addition of free list
*
* Revision 1.8 91/11/25 14:42:03 cpcahil
* Final changes in preparation for patch 4 release
*
* Revision 1.7 91/11/24 00:49:30 cpcahil
* first cut at patch 4
*
* Revision 1.6 90/08/29 22:23:36 cpcahil
* fixed mallopt to use a union as an argument.
*
* Revision 1.5 90/08/29 21:22:51 cpcahil
* miscellaneous lint fixes
*
* Revision 1.4 90/05/11 00:13:10 cpcahil
* added copyright statment
*
* Revision 1.3 90/02/25 11:03:26 cpcahil
* changed to return int so that it agrees with l libmalloc.a's mallopt()
*
* Revision 1.2 90/02/25 11:01:21 cpcahil
* added support for malloc chain checking.
*
* Revision 1.1 90/02/24 21:50:24 cpcahil
* Initial revision
*
* Revision 1.1 90/02/24 17:10:53 cpcahil
* Initial revision
*
*/