herr_t
ss_array_resize(ss_array_t *array, /* Array whose size is to be changed. */
size_t nelmts /* Number of total elements to be contained in the array. */
)
{
SS_ENTER(ss_array_resize, herr_t);
size_t mtype_size; /* Size of each array element in memory (i.e., in `mbuf') */
if (!array) SS_ERROR_FMT(USAGE, ("no ss_array_t supplied"));
if (array->nelmts==nelmts) goto done;
/* Extend the memory buffer with zeros */
if (array->mbuf && nelmts>array->nelmts) {
mtype_size = H5Tget_size(array->mtype>0 ? array->mtype : ss_pers_tm);
if (NULL==(array->mbuf=realloc(array->mbuf, nelmts*mtype_size))) SS_ERROR(RESOURCE);
memset((char*)(array->mbuf)+array->nelmts*mtype_size, 0, (nelmts-array->nelmts)*mtype_size);
}
/* Mark as dirty so that the `fbuf' string gets updated */
array->nelmts = nelmts;
array->dirty = TRUE;
done:
SS_CLEANUP:
SS_LEAVE(0);
}