void *
vector_alloc_slot(vector v)
{
+ void *new_slot = NULL;
+
+ if (!v)
+ return NULL;
+
v->allocated += VECTOR_DEFAULT_SIZE;
if (v->slot)
- v->slot = REALLOC(v->slot, sizeof (void *) * v->allocated);
+ new_slot = REALLOC(v->slot, sizeof (void *) * v->allocated);
else
- v->slot = (void *) MALLOC(sizeof (void *) * v->allocated);
+ new_slot = (void *) MALLOC(sizeof (void *) * v->allocated);
- if (!v->slot)
+ if (!new_slot)
v->allocated -= VECTOR_DEFAULT_SIZE;
+ else
+ v->slot = new_slot;
return v->slot;
}
{
int i;
- if (!v->allocated || slot < 0 || slot > VECTOR_SIZE(v))
+ if (!v || !v->allocated || slot < 0 || slot > VECTOR_SIZE(v))
return;
for (i = slot + 1; i < (v->allocated / VECTOR_DEFAULT_SIZE); i++)
if (!v->allocated) {
FREE(v->slot);
v->slot = NULL;
+ v->allocated = 0;
+ } else {
+ void *new_slot;
+
+ new_slot = REALLOC(v->slot, sizeof (void *) * v->allocated);
+ if (!new_slot)
+ v->allocated += VECTOR_DEFAULT_SIZE;
+ else
+ v->slot = new_slot;
}
- else
- v->slot = REALLOC(v->slot, sizeof (void *) * v->allocated);
}
void
{
int i;
- if (!v->allocated)
+ if (!v || !v->allocated)
return;
for (i = 0; i < (v->allocated / VECTOR_DEFAULT_SIZE); i++)
if (v->slot)
FREE(v->slot);
+ v->allocated = 0;
+ v->slot = NULL;
FREE(v);
}
void
vector_set_slot(vector v, void *value)
{
- unsigned int i = v->allocated - 1;
+ unsigned int i;
+
+ if (!v)
+ return;
+ i = VECTOR_SIZE(v) - 1;
v->slot[i] = value;
}