changeset 5:2915fb26c9e2 VMS__malloc_brch

Changed malloc and free to VMS__malloc and VMS__free
author Me
date Sun, 31 Oct 2010 20:26:32 -0700
parents f35e64d7a42b
children f4b108f21041
files DynArray.c
diffstat 1 files changed, 56 insertions(+), 13 deletions(-) [+]
line diff
     1.1 --- a/DynArray.c	Sat Oct 30 22:12:32 2010 -0700
     1.2 +++ b/DynArray.c	Sun Oct 31 20:26:32 2010 -0700
     1.3 @@ -7,7 +7,6 @@
     1.4  
     1.5  
     1.6  #include <stdio.h>
     1.7 -#include <malloc.h>
     1.8  
     1.9  #include "DynArray.h"
    1.10  
    1.11 @@ -17,7 +16,7 @@
    1.12  makeDynArrayInfoFrom( void ***addrOfPtrToArray, int32 sizeOfArray )
    1.13   { DynArrayInfo *info;
    1.14  
    1.15 -   info = malloc( sizeof(DynArrayInfo) );
    1.16 +   info = VMS__malloc( sizeof(DynArrayInfo) );
    1.17  
    1.18     info->addrOfPtrToArray = addrOfPtrToArray;
    1.19     info->sizeOfArray      = sizeOfArray;
    1.20 @@ -28,11 +27,11 @@
    1.21  makeDynArrayOfSize( void ***addrOfPtrToArray, int32 sizeOfArray )
    1.22   { DynArrayInfo *info;
    1.23  
    1.24 -   info = malloc( sizeof(DynArrayInfo) );
    1.25 +   info = VMS__malloc( sizeof(DynArrayInfo) );
    1.26  
    1.27     info->addrOfPtrToArray = addrOfPtrToArray;
    1.28     
    1.29 -   *(addrOfPtrToArray)    = malloc( sizeOfArray * sizeof(void *) );
    1.30 +   *(addrOfPtrToArray)    = VMS__malloc( sizeOfArray * sizeof(void *) );
    1.31     info->sizeOfArray      = sizeOfArray;
    1.32     info->numInArray       = 0;
    1.33   }
    1.34 @@ -50,7 +49,7 @@
    1.35  addToDynArray( void *value, DynArrayInfo *info )
    1.36   { int32 numInArray, sizeOfArray;
    1.37     void **array;
    1.38 - 
    1.39 +
    1.40     numInArray = info->numInArray;
    1.41     sizeOfArray    = info->sizeOfArray;
    1.42  
    1.43 @@ -58,7 +57,26 @@
    1.44      {
    1.45        increaseSizeOfDynArrayTo( info, sizeOfArray * 2 );
    1.46      }
    1.47 -   
    1.48 +
    1.49 +   array = *(info->addrOfPtrToArray);
    1.50 +   array[ numInArray ] = value;
    1.51 +   info->numInArray++;
    1.52 +
    1.53 +   return numInArray; //pre-incr value is the index put value into
    1.54 + }
    1.55 +int32
    1.56 +VMS_ext__addToDynArray( void *value, DynArrayInfo *info )
    1.57 + { int32 numInArray, sizeOfArray;
    1.58 +   void **array;
    1.59 +
    1.60 +   numInArray = info->numInArray;
    1.61 +   sizeOfArray    = info->sizeOfArray;
    1.62 +
    1.63 +   if( numInArray >= sizeOfArray )
    1.64 +    {
    1.65 +      VMS_ext__increaseSizeOfDynArrayTo( info, sizeOfArray * 2 );
    1.66 +    }
    1.67 +
    1.68     array = *(info->addrOfPtrToArray);
    1.69     array[ numInArray ] = value;
    1.70     info->numInArray++;
    1.71 @@ -91,12 +109,12 @@
    1.72  increaseSizeOfDynArrayTo( DynArrayInfo *info, int32 newSize )
    1.73   { int32 oldSizeOfArray, i;
    1.74     void **newArray, **oldArray;
    1.75 - 
    1.76 +
    1.77     oldSizeOfArray   = info->sizeOfArray;
    1.78     if( newSize <= oldSizeOfArray ) return;
    1.79 -   
    1.80 +
    1.81     oldArray         = *(info->addrOfPtrToArray);
    1.82 -   newArray         = malloc( newSize * sizeof(void *) );
    1.83 +   newArray         = VMS__malloc( newSize * sizeof(void *) );
    1.84  
    1.85     for( i = 0; i < oldSizeOfArray; i++ )
    1.86      {
    1.87 @@ -105,7 +123,32 @@
    1.88     *(info->addrOfPtrToArray) = newArray; //change location of array-ptr
    1.89     info->sizeOfArray = newSize;
    1.90  
    1.91 -   free( oldArray );
    1.92 +   VMS__free( oldArray );
    1.93 + }
    1.94 +
    1.95 +/*Can't mix VMS__malloc locations with external malloc locations -- so use
    1.96 + * this version inside VMS, which will perform normal malloc in the core
    1.97 + * loop -- hopefully avoiding the annoying system-stack bugs..
    1.98 + */
    1.99 +void
   1.100 +VMS_ext__increaseSizeOfDynArrayTo( DynArrayInfo *info, int32 newSize )
   1.101 + { int32 oldSizeOfArray, i;
   1.102 +   void **newArray, **oldArray;
   1.103 +
   1.104 +   oldSizeOfArray   = info->sizeOfArray;
   1.105 +   if( newSize <= oldSizeOfArray ) return;
   1.106 +
   1.107 +   oldArray         = *(info->addrOfPtrToArray);
   1.108 +   newArray         = VMS__malloc_in_ext( newSize * sizeof(void *) );
   1.109 +
   1.110 +   for( i = 0; i < oldSizeOfArray; i++ )
   1.111 +    {
   1.112 +      newArray[i] = oldArray[i];
   1.113 +    }
   1.114 +   *(info->addrOfPtrToArray) = newArray; //change location of array-ptr
   1.115 +   info->sizeOfArray = newSize;
   1.116 +
   1.117 +   VMS__free( oldArray );
   1.118   }
   1.119  
   1.120  
   1.121 @@ -115,8 +158,8 @@
   1.122  freeDynArrayDeep( DynArrayInfo *info, FreeFnPtr freeFnPtr )
   1.123   {
   1.124     forAllInDynArrayDo( info, freeFnPtr );
   1.125 -   free( *(info->addrOfPtrToArray) );
   1.126 -   free( info );
   1.127 +   VMS__free( *(info->addrOfPtrToArray) );
   1.128 +   VMS__free( info );
   1.129   }
   1.130  
   1.131  /* Only frees the info
   1.132 @@ -124,7 +167,7 @@
   1.133  void
   1.134  freeDynArrayFlat( DynArrayInfo *info )
   1.135   {
   1.136 -   free( info );
   1.137 +   VMS__free( info );
   1.138   }
   1.139  
   1.140