/*** *heapprm.c - Set/report heap parameters * * Copyright (c) 1991, Microsoft Corporation. All rights reserved. * *Purpose: * Set or report the values of certain parameters in the heap. * *Revision History: * 03-04-91 GJF Module created. * *******************************************************************************/ #include #include #include #include /*** *_heap_param(int flag, int param_id, void *pparam) - set or report the values * of the specified heap parameter. * *Purpose: * Get or set certain parameters which affect the behavior of the heap. * The supported parameters vary implementation to implementation and * version to version. See description of entry conditions for the * currently supported parameters. * *Entry: * int flag - _HP_GETPARAM, to get a parameter value, or _HP_SETPARAM, * to set a parameter value * * int param_id - identifier for the heap parameter. values supported in * this release are: * * _HP_AMBLKSIZ - _amblksiz (aka _heap_growsize) parameter * _HP_GROWSIZE - same as _HP_AMBLKSIZ * _HP_RESETSIZE - _heap_resetsize parameter * * void *pparam - pointer to variable of appropriate type for the heap * parameter to be fetched/set * *Exit: * 0 = no error has occurred * -1 = an error has occurred (errno is set) * *Exceptions: * *******************************************************************************/ int _CALLTYPE1 _heap_param ( int flag, int param_id, void *pparam ) { switch ( param_id ) { case _HP_RESETSIZE: if ( flag == _HP_SETPARAM ) { _mlock(_HEAP_LOCK); _heap_resetsize = *(unsigned *)pparam; _munlock(_HEAP_LOCK); } else *(unsigned *)pparam = _heap_resetsize; break; case _HP_AMBLKSIZ: if ( flag == _HP_SETPARAM ) /* * the only references to _amblksiz (aka * _heap_growsize) are atomic. therefore, the * heap does not need to be locked. */ _amblksiz = *(unsigned *)pparam; else *(unsigned *)pparam = _amblksiz; break; default: return -1; } return 0; }