Fixup for growing array to fixed size

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@26994 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2008-10-31 10:47:08 +00:00
parent 18ddcc0629
commit abee49fd42
2 changed files with 20 additions and 2 deletions

View file

@ -185,6 +185,7 @@ GSIArrayGrow(GSIArray array)
if (array->old < 1)
{
array->old = 1;
array->cap = 1;
}
next = array->cap + array->old;
size = next*sizeof(GSIArrayItem);
@ -220,7 +221,24 @@ GSIArrayGrowTo(GSIArray array, unsigned next)
format: @"attempt to shrink below count"];
}
size = next*sizeof(GSIArrayItem);
tmp = NSZoneRealloc(array->zone, array->ptr, size);
if (array->old == 0)
{
/*
* Statically initialised buffer ... copy into new heap buffer.
*/
array->old = array->cap / 2;
if (array->old < 1)
{
array->old = 1;
array->cap = 1;
}
tmp = NSZoneMalloc(array->zone, size);
memcpy(tmp, array->ptr, array->count * sizeof(GSIArrayItem));
}
else
{
tmp = NSZoneRealloc(array->zone, array->ptr, size);
}
if (tmp == 0)
{

View file

@ -798,7 +798,7 @@ static NSMapTable globalClassMap = 0;
NSNonOwnedPointerMapValueCallBacks, 0);
_objMap = NSZoneMalloc(_zone, sizeof(GSIArray_t));
count = [_objects count];
GSIArrayInitWithZoneAndCapacity(_objMap, _zone, count);
GSIArrayInitWithZoneAndCapacity(_objMap, _zone, count+1);
// Add marker for nil object
GSIArrayAddItem(_objMap, (GSIArrayItem)((id)[NilMarker class]));
// Add markers for unencoded objects.