rpmfi rpmfiFree(rpmfi fi) { if (fi == NULL) return NULL; if (fi->nrefs > 1) return rpmfiUnlink(fi); if (fi->fc > 0) { fi->bnl = _free(fi->bnl); fi->dnl = _free(fi->dnl); fi->flinkcache = strcacheFree(fi->flinkcache); fi->flinks = _free(fi->flinks); fi->flangs = _free(fi->flangs); fi->digests = _free(fi->digests); fi->fcapcache = strcacheFree(fi->fcapcache); fi->fcaps = _free(fi->fcaps); fi->cdict = _free(fi->cdict); fi->fuser = _free(fi->fuser); fi->fgroup = _free(fi->fgroup); fi->fstates = _free(fi->fstates); fi->fps = _free(fi->fps); /* these point to header memory if KEEPHEADER is used, dont free */ if (!(fi->fiflags & RPMFI_KEEPHEADER) && fi->h == NULL) { fi->fmtimes = _free(fi->fmtimes); fi->fmodes = _free(fi->fmodes); fi->fflags = _free(fi->fflags); fi->vflags = _free(fi->vflags); fi->fsizes = _free(fi->fsizes); fi->frdevs = _free(fi->frdevs); fi->finodes = _free(fi->finodes); fi->dil = _free(fi->dil); fi->fcolors = _free(fi->fcolors); fi->fcdictx = _free(fi->fcdictx); fi->ddict = _free(fi->ddict); fi->fddictx = _free(fi->fddictx); fi->fddictn = _free(fi->fddictn); } } fi->fn = _free(fi->fn); fi->apath = _free(fi->apath); fi->replacedSizes = _free(fi->replacedSizes); fi->h = headerFree(fi->h); (void) rpmfiUnlink(fi); memset(fi, 0, sizeof(*fi)); /* XXX trash and burn */ fi = _free(fi); return NULL; }
rpmfi rpmfiFree(rpmfi fi) { if (fi == NULL) return NULL; if (fi->nrefs > 1) return rpmfiUnlink(fi, __FUNCTION__); if (_rpmfi_debug < 0) fprintf(stderr, "*** fi %p\t[%d]\n", fi, fi->fc); if (fi->fc > 0) { fi->bnl = _free(fi->bnl); fi->dnl = _free(fi->dnl); fi->flinkcache = strcacheFree(fi->flinkcache); fi->flinks = _free(fi->flinks); fi->flangs = _free(fi->flangs); fi->digests = _free(fi->digests); fi->fcapcache = strcacheFree(fi->fcapcache); fi->fcaps = _free(fi->fcaps); fi->cdict = _free(fi->cdict); fi->fuser = _free(fi->fuser); fi->fgroup = _free(fi->fgroup); fi->fstates = _free(fi->fstates); fi->fps = _free(fi->fps); if (!(fi->fiflags & RPMFI_KEEPHEADER) && fi->h == NULL) { fi->fmtimes = _constfree(fi->fmtimes); fi->fmodes = _free(fi->fmodes); fi->fflags = _constfree(fi->fflags); fi->vflags = _constfree(fi->vflags); fi->fsizes = _constfree(fi->fsizes); fi->frdevs = _constfree(fi->frdevs); fi->finodes = _constfree(fi->finodes); fi->dil = _free(fi->dil); fi->fcolors = _constfree(fi->fcolors); fi->fcdictx = _constfree(fi->fcdictx); fi->ddict = _constfree(fi->ddict); fi->fddictx = _constfree(fi->fddictx); fi->fddictn = _constfree(fi->fddictn); } } fi->fsm = freeFSM(fi->fsm); fi->fn = _free(fi->fn); fi->apath = _free(fi->apath); fi->replacedSizes = _free(fi->replacedSizes); fi->h = headerFree(fi->h); (void) rpmfiUnlink(fi, __FUNCTION__); memset(fi, 0, sizeof(*fi)); /* XXX trash and burn */ fi = _free(fi); return NULL; }