Mercurial > hg > minc-tools
changeset 2487:5ae8b796d15e
check for memory allocation of the volume image
author | claude <claude> |
---|---|
date | Wed, 03 Jun 2009 17:15:51 +0000 |
parents | 2c3e2e826e66 |
children | c9b676b802a8 |
files | volume_io/Volumes/input_free.c volume_io/Volumes/input_mnc.c volume_io/Volumes/input_volume.c volume_io/Volumes/multidim_arrays.c volume_io/Volumes/volumes.c |
diffstat | 5 files changed, 58 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/volume_io/Volumes/input_free.c +++ b/volume_io/Volumes/input_free.c @@ -489,8 +489,10 @@ if( (long) volume_input->slice_index < volume_input->sizes_in_file[0] ) { - if( !volume_is_alloced( volume ) ) + if( !volume_is_alloced( volume ) ) { alloc_volume_data( volume ); + if( !volume_is_alloced( volume ) ) return( FALSE ); + } status = input_slice( volume_input );
--- a/volume_io/Volumes/input_mnc.c +++ b/volume_io/Volumes/input_mnc.c @@ -1016,6 +1016,7 @@ file->filename, &file->original_input_options ); } + if( !volume_is_alloced( volume ) ) return( FALSE ); } if( volume->is_cached_volume )
--- a/volume_io/Volumes/input_volume.c +++ b/volume_io/Volumes/input_volume.c @@ -248,6 +248,12 @@ terminate_progress_report( &progress ); delete_volume_input( &input_info ); + + if( !volume_is_alloced( *volume ) ) { + delete_volume( *volume ); + *volume = NULL; + status = ERROR; + } } return( status );
--- a/volume_io/Volumes/multidim_arrays.c +++ b/volume_io/Volumes/multidim_arrays.c @@ -215,9 +215,46 @@ ---------------------------------------------------------------------------- */ VIOAPI BOOLEAN multidim_array_is_alloced( - multidim_array *array ) -{ - return( array->data != NULL ); + multidim_array *array ) { + + BOOLEAN status = FALSE; + void **p1, ***p2, ****p3, *****p4, ******p5; + + if( array == NULL ) return( FALSE ); + + switch( array->n_dimensions ) { + case 1: p1 = (void **)&array->data; + status = ( *p1 != NULL ); + break; + case 2: p2 = (void ***)&array->data; + if( *p2 == NULL ) break; + if( **p2 == NULL ) break; + status = TRUE; + break; + case 3: p3 = (void ****)&array->data; + if( *p3 == NULL ) break; + if( **p3 == NULL ) break; + if( ***p3 == NULL ) break; + status = TRUE; + break; + case 4: p4 = (void *****)&array->data; + if( *p4 == NULL ) break; + if( **p4 == NULL ) break; + if( ***p4 == NULL ) break; + if( ****p4 == NULL ) break; + status = TRUE; + break; + case 5: p5 = (void ******)&array->data; + if( *p5 == NULL ) break; + if( **p5 == NULL ) break; + if( ***p5 == NULL ) break; + if( ****p5 == NULL ) break; + if( *****p5 == NULL ) break; + status = TRUE; + break; + } + + return( status ); } /* ----------------------------- MNI Header -----------------------------------
--- a/volume_io/Volumes/volumes.c +++ b/volume_io/Volumes/volumes.c @@ -2392,6 +2392,11 @@ voxel_min, voxel_max ); alloc_volume_data( copy ); + if( !volume_is_alloced( copy ) ) { + delete_volume( copy ); + copy = NULL; + } + return( copy ); } @@ -2424,6 +2429,9 @@ } copy = copy_volume_definition( volume, MI_ORIGINAL_TYPE, FALSE, 0.0, 0.0 ); + if( !copy ) { + return( NULL ); + } /* --- find out how many voxels are in the volume */