/* * Enlarge the put list * When there are no more unused ids to issue, we must add more ids to the pool * We simply enlarge ids and reqs array * We initialize the extended part as usual */ int ncdwio_put_list_resize(NC_dw *ncdwp){ int i; size_t nsize; void *ptr; NC_dw_put_list *lp = &(ncdwp->putlist); /* Calculate new size */ nsize = lp->nalloc * SIZE_MULTIPLIER; /* Realloc reqs and ids */ ptr = NCI_Realloc(lp->reqs, nsize * sizeof(NC_dw_put_req)); if (ptr == NULL){ DEBUG_RETURN_ERROR(NC_ENOMEM); } lp->reqs = (NC_dw_put_req*)ptr; ptr = NCI_Realloc(lp->ids, nsize * SIZEOF_INT); if (ptr == NULL){ DEBUG_RETURN_ERROR(NC_ENOMEM); } lp->ids = (int*)ptr; /* Initialize values of ids and reqs * Assign increasing unique id */ for(i = lp->nalloc; i < nsize; i++){ lp->ids[i] = i; // Unique ids lp->reqs[i].valid = 0; // Not in use } lp->nalloc = nsize; return NC_NOERR; }
/* * Add a new handle on the end of an array of handles * Formerly NC_incr_array(array, tail) */ static int incr_NC_vararray(NC_vararray *ncap, NC_var *newvarp) { NC_var **vp; assert(ncap != NULL); if (ncap->nalloc == 0) { /* no variable has been allocated yet */ assert(ncap->ndefined == 0); vp = (NC_var **) NCI_Malloc(NC_ARRAY_GROWBY * sizeof(NC_var *)); if (vp == NULL) return NC_ENOMEM; ncap->value = vp; ncap->nalloc = NC_ARRAY_GROWBY; } else if (ncap->ndefined + 1 > ncap->nalloc) { vp = (NC_var **) NCI_Realloc(ncap->value, (ncap->nalloc + NC_ARRAY_GROWBY) * sizeof(NC_var *)); if (vp == NULL) return NC_ENOMEM; ncap->value = vp; ncap->nalloc += NC_ARRAY_GROWBY; } if (newvarp != NULL) { ncap->value[ncap->ndefined] = newvarp; ncap->ndefined++; } return NC_NOERR; }
/* * Add a new handle to the end of an array of handles * Formerly, NC_incr_array(array, tail) */ static int incr_NC_dimarray(NC_dimarray *ncap, NC_dim *newdimp) { NC_dim **vp; assert(ncap != NULL); if (ncap->nalloc == 0) { assert(ncap->ndefined == 0); vp = (NC_dim **) NCI_Malloc(NC_ARRAY_GROWBY * sizeof(NC_dim *)); if (vp == NULL) return NC_ENOMEM; ncap->value = vp; ncap->nalloc = NC_ARRAY_GROWBY; } else if (ncap->ndefined + 1 > ncap->nalloc) { vp = (NC_dim **) NCI_Realloc(ncap->value, (ncap->nalloc + NC_ARRAY_GROWBY) * sizeof(NC_dim *)); if (vp == NULL) return NC_ENOMEM; ncap->value = vp; ncap->nalloc += NC_ARRAY_GROWBY; } /* else here means some space still available */ if (newdimp != NULL) { ncap->value[ncap->ndefined] = newdimp; ncap->ndefined++; } return NC_NOERR; }