int dup_NC_vararrayV(NC_vararray *ncap, const NC_vararray *ref) { int status = NC_NOERR; assert(ref != NULL); assert(ncap != NULL); if(ref->nelems != 0) { const size_t sz = ref->nelems * sizeof(NC_var *); ncap->value = (NC_var **) malloc(sz); if(ncap->value == NULL) return NC_ENOMEM; (void) memset(ncap->value, 0, sz); ncap->nalloc = ref->nelems; } ncap->nelems = 0; { NC_var **vpp = ncap->value; const NC_var **drpp = (const NC_var **)ref->value; NC_var *const *const end = &vpp[ref->nelems]; for( /*NADA*/; vpp < end; drpp++, vpp++, ncap->nelems++) { *vpp = dup_NC_var(*drpp); if(*vpp == NULL) { status = NC_ENOMEM; break; } } } if(status != NC_NOERR) { free_NC_vararrayV(ncap); return status; } assert(ncap->nelems == ref->nelems); return NC_NOERR; }
int ncmpii_dup_NC_vararrayV(NC_vararray *ncap, const NC_vararray *ref) { int status = NC_NOERR; assert(ref != NULL); assert(ncap != NULL); if(ref->ndefined != 0) { const MPI_Offset sz = ref->ndefined * sizeof(NC_var *); ncap->value = (NC_var **) NCI_Malloc(sz); if(ncap->value == NULL) return NC_ENOMEM; (void) memset(ncap->value, 0, sz); ncap->nalloc = ref->ndefined; } ncap->ndefined = 0; { NC_var **vpp = ncap->value; const NC_var **drpp = (const NC_var **)ref->value; NC_var *const *const end = &vpp[ref->ndefined]; for( /*NADA*/; vpp < end; drpp++, vpp++, ncap->ndefined++) { *vpp = dup_NC_var(*drpp); if(*vpp == NULL) { status = NC_ENOMEM; break; } } } if(status != NC_NOERR) { ncmpii_free_NC_vararrayV(ncap); return status; } assert(ncap->ndefined == ref->ndefined); return NC_NOERR; }