NCerror freeNCDAPCOMMON(NCDAPCOMMON* dapcomm) { /* abort the metadata file */ (void)nc_abort(getncid(dapcomm)); freenccache(dapcomm,dapcomm->cdf.cache); nclistfree(dapcomm->cdf.projectedvars); nullfree(dapcomm->cdf.recorddimname); /* free the trees */ freecdfroot34(dapcomm->cdf.ddsroot); dapcomm->cdf.ddsroot = NULL; freecdfroot34(dapcomm->cdf.fullddsroot); dapcomm->cdf.fullddsroot = NULL; if(dapcomm->oc.ocdasroot != NULL) oc_root_free(dapcomm->oc.conn,dapcomm->oc.ocdasroot); dapcomm->oc.ocdasroot = NULL; oc_close(dapcomm->oc.conn); /* also reclaims remaining OC trees */ ncurifree(dapcomm->oc.url); nullfree(dapcomm->oc.urltext); nullfree(dapcomm->oc.rawurltext); dcefree((DCEnode*)dapcomm->oc.dapconstraint); dapcomm->oc.dapconstraint = NULL; free(dapcomm); return NC_NOERR; }
void freenccachenode(NCDAPCOMMON* nccomm, NCcachenode* node) { if(node == NULL) return; oc_data_free(nccomm->oc.conn,node->content); #ifdef IGNORE oc_root_free(nccomm->oc.conn,node->ocroot); #endif dcefree((DCEnode*)node->constraint); freecdfroot34(node->datadds); nclistfree(node->vars); nullfree(node); }
void freecdfroot(CDFnode* root) { int i; CDFtree* tree; NCDAPCOMMON* nccomm; if(root == NULL) return; tree = root->tree; ASSERT((tree != NULL)); /* Explicitly FREE the ocroot */ nccomm = tree->owner; oc_root_free(nccomm->oc.conn,tree->ocroot); tree->ocroot = NULL; for(i=0;i<nclistlength(tree->nodes);i++) { CDFnode* node = (CDFnode*)nclistget(tree->nodes,i); free1cdfnode(node); } nclistfree(tree->nodes); nclistfree(tree->varnodes); nclistfree(tree->seqnodes); nclistfree(tree->gridnodes); nullfree(tree); }