Mercurial > hg > minc-tools
changeset 1159:5d41223d6294
*** empty log message ***
author | david <david> |
---|---|
date | Mon, 27 Apr 1998 19:54:39 +0000 |
parents | 8630de31e20c |
children | a0ff3184a2b7 |
files | volume_io/Prog_utils/alloc.c |
diffstat | 1 files changed, 60 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/volume_io/Prog_utils/alloc.c +++ b/volume_io/Prog_utils/alloc.c @@ -16,9 +16,40 @@ #include <stdlib.h> #ifndef lint -static char rcsid[] = "$Header: /private-cvsroot/minc/volume_io/Prog_utils/alloc.c,v 1.22 1998-04-27 14:59:30 david Exp $"; +static char rcsid[] = "$Header: /private-cvsroot/minc/volume_io/Prog_utils/alloc.c,v 1.23 1998-04-27 19:54:39 david Exp $"; #endif +private void * (*malloc_ptr) ( size_t ) = NULL; +private void * (*realloc_ptr) ( void *, size_t ) = NULL; +private void (*free_ptr) ( void * ) = NULL; + +/* ----------------------------- MNI Header ----------------------------------- +@NAME : install_malloc_functions +@INPUT : malloc_function + realloc_function + free_function +@OUTPUT : +@RETURNS : +@DESCRIPTION: Allows installation of memory allocation functions. For + instance, this would allow a multiprocessing program to + put locks around calls to the UNIX library malloc(). +@METHOD : +@GLOBALS : +@CALLS : +@CREATED : Apr. 27, 1998 David MacDonald +@MODIFIED : +---------------------------------------------------------------------------- */ + +public void install_malloc_functions( +void * (*malloc_function) ( size_t ), +void * (*realloc_function) ( void *, size_t ), +void (*free_function) ( void * ) ) +{ + malloc_ptr = malloc_function; + realloc_ptr = realloc_function; + free_ptr = free_function; +} + /* ----------------------------- MNI Header ----------------------------------- @NAME : private_alloc_memory @INPUT : n_bytes @@ -38,7 +69,10 @@ { if( n_bytes != 0 ) { - *ptr = (void *) malloc( n_bytes ); + if( malloc_ptr == NULL ) + *ptr = (void *) malloc( n_bytes ); + else + *ptr = (*malloc_ptr) ( n_bytes ); if( *ptr == NULL ) return( ERROR ); @@ -78,7 +112,10 @@ if( n_elements != 0 ) { - *ptr = (void *) realloc( *ptr, n_elements * type_size ); + if( realloc_ptr == NULL ) + *ptr = (void *) realloc( *ptr, n_elements * type_size ); + else + *ptr = (*realloc_ptr)( *ptr, n_elements * type_size ); if( *ptr == NULL ) { @@ -119,7 +156,10 @@ { if( *ptr != NULL ) { - free( *ptr ); + if( free_ptr == NULL ) + free( *ptr ); + else + (*free_ptr)( *ptr ); *ptr = NULL; } @@ -258,9 +298,11 @@ size_t type_size _ALLOC_SOURCE_LINE_ARG_DEF ) { - void **ptr; + void **ptr, ***ptr_to_alloc; - if( private_alloc_memory( (void **) &ptr, + ptr_to_alloc = &ptr; + + if( private_alloc_memory( (void **) ptr_to_alloc, n1 * sizeof(void *) + n1 * n2 * type_size ) != OK ) { @@ -308,9 +350,11 @@ size_t type_size _ALLOC_SOURCE_LINE_ARG_DEF ) { - void ***ptr; + void ***ptr, ****ptr_to_alloc; - if( private_alloc_memory( (void **) &ptr, + ptr_to_alloc = &ptr; + + if( private_alloc_memory( (void **) ptr_to_alloc, n1 * sizeof(void **) + n1 * n2 * sizeof(void *) + n1 * n2 * n3 * type_size ) != OK ) @@ -365,9 +409,11 @@ size_t type_size _ALLOC_SOURCE_LINE_ARG_DEF ) { - void ****ptr; + void ****ptr, *****ptr_to_alloc; - if( private_alloc_memory( (void **) &ptr, + ptr_to_alloc = &ptr; + + if( private_alloc_memory( (void **) ptr_to_alloc, n1 * sizeof(void ***) + n1 * n2 * sizeof(void **) + n1 * n2 * n3 * sizeof( void * ) + @@ -427,9 +473,11 @@ size_t type_size _ALLOC_SOURCE_LINE_ARG_DEF ) { - void *****ptr; + void *****ptr, ******ptr_to_alloc; - if( private_alloc_memory( (void **) &ptr, + ptr_to_alloc = &ptr; + + if( private_alloc_memory( (void **) ptr_to_alloc, n1 * sizeof(void ****) + n1 * n2 * sizeof(void ***) + n1 * n2 * n3 * sizeof( void ** ) +