fingerPrintCache fpCacheCreate(int sizeHint, rpmstrPool pool) { fingerPrintCache fpc; fpc = xcalloc(1, sizeof(*fpc)); fpc->ht = rpmFpEntryHashCreate(sizeHint, sidHash, sidCmp, NULL, (rpmFpEntryHashFreeData)free); fpc->pool = (pool != NULL) ? rpmstrPoolLink(pool) : rpmstrPoolCreate(); return fpc; }
rpmfi rpmfiNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, rpmfiFlags flags) { rpmfi fi = xcalloc(1, sizeof(*fi)); struct rpmtd_s bn, dn, dx; fi->magic = RPMFIMAGIC; fi->i = -1; fi->fiflags = flags; /* * Grab and validate file triplet data. Headers with no files simply * fall through here and an empty file set is returned. */ if (headerGet(h, RPMTAG_BASENAMES, &bn, HEADERGET_MINMEM)) { headerGet(h, RPMTAG_DIRNAMES, &dn, HEADERGET_MINMEM); headerGet(h, RPMTAG_DIRINDEXES, &dx, HEADERGET_ALLOC); if (indexSane(&bn, &dn, &dx)) { /* private or shared pool? */ fi->pool = (pool != NULL) ? rpmstrPoolLink(pool) : rpmstrPoolCreate(); /* init the file triplet data */ fi->fc = rpmtdCount(&bn); fi->dc = rpmtdCount(&dn); fi->bnid = rpmtdToPool(&bn, fi->pool); fi->dnid = rpmtdToPool(&dn, fi->pool); /* steal index data from the td (pooh...) */ fi->dil = dx.data; dx.data = NULL; /* populate the rest of the stuff */ rpmfiPopulate(fi, h, flags); /* freeze the pool to save memory, but only if private pool */ if (fi->pool != pool) rpmstrPoolFreeze(fi->pool, 0); fi->h = (fi->fiflags & RPMFI_KEEPHEADER) ? headerLink(h) : NULL; } else { /* broken data, free and return NULL */ fi = _free(fi); } rpmtdFreeData(&bn); rpmtdFreeData(&dn); rpmtdFreeData(&dx); } return rpmfiLink(fi); }
static rpmds rpmdsCreate(rpmstrPool pool, rpmTagVal tagN, const char * Type, int Count, unsigned int instance) { rpmds ds = xcalloc(1, sizeof(*ds)); ds->pool = (pool != NULL) ? rpmstrPoolLink(pool) : rpmstrPoolCreate(); ds->tagN = tagN; ds->Type = Type; ds->Count = Count; ds->instance = instance; ds->nopromote = _rpmds_nopromote; ds->i = -1; return rpmdsLink(ds); }
rpmal rpmalCreate(rpmstrPool pool, int delta, rpmtransFlags tsflags, rpm_color_t tscolor, rpm_color_t prefcolor) { rpmal al = xcalloc(1, sizeof(*al)); /* transition time safe-guard */ assert(pool != NULL); al->pool = rpmstrPoolLink(pool); al->delta = delta; al->size = 0; al->alloced = al->delta; al->list = xmalloc(sizeof(*al->list) * al->alloced);; al->providesHash = NULL; al->obsoletesHash = NULL; al->fileHash = NULL; al->tsflags = tsflags; al->tscolor = tscolor; al->prefcolor = prefcolor; return al; }