/* * Free var * Formerly NC_free_var(var) */ void free_NC_var(NC_var *varp) { if(varp == NULL) return; free_NC_attrarrayV(&varp->attrs); free_NC_string(varp->name); free(varp); }
/* * Free var * Formerly NC_free_var(var) */ void free_NC_var(NC_var *varp) { if(varp == NULL) return; free_NC_attrarrayV(&varp->attrs); free_NC_string(varp->name); #ifndef MALLOCHACK if(varp->dimids != NULL) free(varp->dimids); if(varp->shape != NULL) free(varp->shape); if(varp->dsizes != NULL) free(varp->dsizes); #endif /*!MALLOCHACK*/ free(varp); }
static void free_NC(NC *ncp) { if(ncp == NULL) return; free_NC_dimarrayV(&ncp->dims); free_NC_attrarrayV(&ncp->attrs); free_NC_vararrayV(&ncp->vars); #if _CRAYMPP && defined(LOCKNUMREC) shfree(ncp); #else free(ncp); #endif /* _CRAYMPP && LOCKNUMREC */ }
/* * Read in the header * It is expensive. */ static int read_NC(NC *ncp) { int status = NC_NOERR; free_NC_dimarrayV(&ncp->dims); free_NC_attrarrayV(&ncp->attrs); free_NC_vararrayV(&ncp->vars); status = nc_get_NC(ncp); if(status == NC_NOERR) fClr(ncp->flags, NC_NDIRTY | NC_HDIRTY); return status; }
/* Read a NC_attrarray from the header */ static int v1h_get_NC_attrarray(v1hs *gsp, NC_attrarray *ncap) { int status; NCtype type = NC_UNSPECIFIED; assert(gsp != NULL && gsp->pos != NULL); assert(ncap != NULL); assert(ncap->value == NULL); status = v1h_get_NCtype(gsp, &type); if(status != ENOERR) return status; status = v1h_get_size_t(gsp, &ncap->nelems); if(status != ENOERR) return status; if(ncap->nelems == 0) return ENOERR; /* else */ if(type != NC_ATTRIBUTE) return EINVAL; ncap->value = (NC_attr **) malloc(ncap->nelems * sizeof(NC_attr *)); if(ncap->value == NULL) return NC_ENOMEM; ncap->nalloc = ncap->nelems; { NC_attr **app = ncap->value; NC_attr *const *const end = &app[ncap->nelems]; for( /*NADA*/; app < end; app++) { status = v1h_get_NC_attr(gsp, app); if(status) { ncap->nelems = (size_t)(app - ncap->value); free_NC_attrarrayV(ncap); return status; } } } return ENOERR; }
int dup_NC_attrarrayV(NC_attrarray *ncap, const NC_attrarray *ref) { int status = NC_NOERR; assert(ref != NULL); assert(ncap != NULL); if(ref->nelems != 0) { const size_t sz = ref->nelems * sizeof(NC_attr *); ncap->value = (NC_attr **) malloc(sz); if(ncap->value == NULL) return NC_ENOMEM; (void) memset(ncap->value, 0, sz); ncap->nalloc = ref->nelems; } ncap->nelems = 0; { NC_attr **app = ncap->value; const NC_attr **drpp = (const NC_attr **)ref->value; NC_attr *const *const end = &app[ref->nelems]; for( /*NADA*/; app < end; drpp++, app++, ncap->nelems++) { *app = dup_NC_attr(*drpp); if(*app == NULL) { status = NC_ENOMEM; break; } } } if(status != NC_NOERR) { free_NC_attrarrayV(ncap); return status; } assert(ncap->nelems == ref->nelems); return NC_NOERR; }