# HG changeset patch # User Me # Date 1288581992 25200 # Node ID 2915fb26c9e2a2da7b3d5da7d1f8bcc08982003b # Parent f35e64d7a42be29c1c5f56166e07912c9b1fd0c9 Changed malloc and free to VMS__malloc and VMS__free diff -r f35e64d7a42b -r 2915fb26c9e2 DynArray.c --- a/DynArray.c Sat Oct 30 22:12:32 2010 -0700 +++ b/DynArray.c Sun Oct 31 20:26:32 2010 -0700 @@ -7,7 +7,6 @@ #include -#include #include "DynArray.h" @@ -17,7 +16,7 @@ makeDynArrayInfoFrom( void ***addrOfPtrToArray, int32 sizeOfArray ) { DynArrayInfo *info; - info = malloc( sizeof(DynArrayInfo) ); + info = VMS__malloc( sizeof(DynArrayInfo) ); info->addrOfPtrToArray = addrOfPtrToArray; info->sizeOfArray = sizeOfArray; @@ -28,11 +27,11 @@ makeDynArrayOfSize( void ***addrOfPtrToArray, int32 sizeOfArray ) { DynArrayInfo *info; - info = malloc( sizeof(DynArrayInfo) ); + info = VMS__malloc( sizeof(DynArrayInfo) ); info->addrOfPtrToArray = addrOfPtrToArray; - *(addrOfPtrToArray) = malloc( sizeOfArray * sizeof(void *) ); + *(addrOfPtrToArray) = VMS__malloc( sizeOfArray * sizeof(void *) ); info->sizeOfArray = sizeOfArray; info->numInArray = 0; } @@ -50,7 +49,7 @@ addToDynArray( void *value, DynArrayInfo *info ) { int32 numInArray, sizeOfArray; void **array; - + numInArray = info->numInArray; sizeOfArray = info->sizeOfArray; @@ -58,7 +57,26 @@ { increaseSizeOfDynArrayTo( info, sizeOfArray * 2 ); } - + + array = *(info->addrOfPtrToArray); + array[ numInArray ] = value; + info->numInArray++; + + return numInArray; //pre-incr value is the index put value into + } +int32 +VMS_ext__addToDynArray( void *value, DynArrayInfo *info ) + { int32 numInArray, sizeOfArray; + void **array; + + numInArray = info->numInArray; + sizeOfArray = info->sizeOfArray; + + if( numInArray >= sizeOfArray ) + { + VMS_ext__increaseSizeOfDynArrayTo( info, sizeOfArray * 2 ); + } + array = *(info->addrOfPtrToArray); array[ numInArray ] = value; info->numInArray++; @@ -91,12 +109,12 @@ increaseSizeOfDynArrayTo( DynArrayInfo *info, int32 newSize ) { int32 oldSizeOfArray, i; void **newArray, **oldArray; - + oldSizeOfArray = info->sizeOfArray; if( newSize <= oldSizeOfArray ) return; - + oldArray = *(info->addrOfPtrToArray); - newArray = malloc( newSize * sizeof(void *) ); + newArray = VMS__malloc( newSize * sizeof(void *) ); for( i = 0; i < oldSizeOfArray; i++ ) { @@ -105,7 +123,32 @@ *(info->addrOfPtrToArray) = newArray; //change location of array-ptr info->sizeOfArray = newSize; - free( oldArray ); + VMS__free( oldArray ); + } + +/*Can't mix VMS__malloc locations with external malloc locations -- so use + * this version inside VMS, which will perform normal malloc in the core + * loop -- hopefully avoiding the annoying system-stack bugs.. + */ +void +VMS_ext__increaseSizeOfDynArrayTo( DynArrayInfo *info, int32 newSize ) + { int32 oldSizeOfArray, i; + void **newArray, **oldArray; + + oldSizeOfArray = info->sizeOfArray; + if( newSize <= oldSizeOfArray ) return; + + oldArray = *(info->addrOfPtrToArray); + newArray = VMS__malloc_in_ext( newSize * sizeof(void *) ); + + for( i = 0; i < oldSizeOfArray; i++ ) + { + newArray[i] = oldArray[i]; + } + *(info->addrOfPtrToArray) = newArray; //change location of array-ptr + info->sizeOfArray = newSize; + + VMS__free( oldArray ); } @@ -115,8 +158,8 @@ freeDynArrayDeep( DynArrayInfo *info, FreeFnPtr freeFnPtr ) { forAllInDynArrayDo( info, freeFnPtr ); - free( *(info->addrOfPtrToArray) ); - free( info ); + VMS__free( *(info->addrOfPtrToArray) ); + VMS__free( info ); } /* Only frees the info @@ -124,7 +167,7 @@ void freeDynArrayFlat( DynArrayInfo *info ) { - free( info ); + VMS__free( info ); }