mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
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:
parent
18ddcc0629
commit
abee49fd42
2 changed files with 20 additions and 2 deletions
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue