Simplify providePackageNVR()
- convert providePackageNVR() to new headerGet() - use rpmds to figure if we already have the provide instead of manually doing it
This commit is contained in:
parent
973cff0efc
commit
c071f46c85
49
lib/legacy.c
49
lib/legacy.c
|
@ -139,18 +139,12 @@ void expandFilelist(Header h)
|
||||||
*/
|
*/
|
||||||
static void providePackageNVR(Header h)
|
static void providePackageNVR(Header h)
|
||||||
{
|
{
|
||||||
HGE_t hge = (HGE_t)headerGetEntryMinMemory;
|
|
||||||
HFD_t hfd = headerFreeData;
|
|
||||||
const char *name;
|
const char *name;
|
||||||
char *pEVR;
|
char *pEVR;
|
||||||
rpmsenseFlags pFlags = RPMSENSE_EQUAL;
|
rpmsenseFlags pFlags = RPMSENSE_EQUAL;
|
||||||
const char ** provides = NULL;
|
|
||||||
const char ** providesEVR = NULL;
|
|
||||||
rpmTagType pnt, pvt;
|
|
||||||
rpmsenseFlags * provideFlags = NULL;
|
|
||||||
rpm_count_t providesCount, i;
|
|
||||||
int xx;
|
|
||||||
int bingo = 1;
|
int bingo = 1;
|
||||||
|
struct rpmtd_s pnames;
|
||||||
|
rpmds hds, nvrds;
|
||||||
|
|
||||||
/* Generate provides for this package name-version-release. */
|
/* Generate provides for this package name-version-release. */
|
||||||
pEVR = headerGetEVR(h, &name);
|
pEVR = headerGetEVR(h, &name);
|
||||||
|
@ -161,50 +155,45 @@ static void providePackageNVR(Header h)
|
||||||
* Rpm prior to 3.0.3 does not have versioned provides.
|
* Rpm prior to 3.0.3 does not have versioned provides.
|
||||||
* If no provides at all are available, we can just add.
|
* If no provides at all are available, we can just add.
|
||||||
*/
|
*/
|
||||||
if (!hge(h, RPMTAG_PROVIDENAME, &pnt, (rpm_data_t *) &provides, &providesCount))
|
if (!headerGet(h, RPMTAG_PROVIDENAME, &pnames, HEADERGET_MINMEM)) {
|
||||||
goto exit;
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Otherwise, fill in entries on legacy packages.
|
* Otherwise, fill in entries on legacy packages.
|
||||||
*/
|
*/
|
||||||
if (!hge(h, RPMTAG_PROVIDEVERSION, &pvt, (rpm_data_t *) &providesEVR, NULL)) {
|
if (!headerIsEntry(h, RPMTAG_PROVIDEVERSION)) {
|
||||||
for (i = 0; i < providesCount; i++) {
|
while (rpmtdNext(&pnames) >= 0) {
|
||||||
const char * vdummy = "";
|
const char * vdummy = "";
|
||||||
rpmsenseFlags fdummy = RPMSENSE_ANY;
|
rpmsenseFlags fdummy = RPMSENSE_ANY;
|
||||||
xx = headerAddOrAppendEntry(h, RPMTAG_PROVIDEVERSION, RPM_STRING_ARRAY_TYPE,
|
headerAddOrAppendEntry(h, RPMTAG_PROVIDEVERSION, RPM_STRING_ARRAY_TYPE,
|
||||||
&vdummy, 1);
|
&vdummy, 1);
|
||||||
xx = headerAddOrAppendEntry(h, RPMTAG_PROVIDEFLAGS, RPM_INT32_TYPE,
|
headerAddOrAppendEntry(h, RPMTAG_PROVIDEFLAGS, RPM_INT32_TYPE,
|
||||||
&fdummy, 1);
|
&fdummy, 1);
|
||||||
}
|
}
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
xx = hge(h, RPMTAG_PROVIDEFLAGS, NULL, (rpm_data_t *) &provideFlags, NULL);
|
/* see if we already have this provide */
|
||||||
|
hds = rpmdsNew(h, RPMTAG_PROVIDENAME, 1);
|
||||||
/* LCL: providesEVR is not NULL */
|
nvrds = rpmdsSingle(RPMTAG_PROVIDENAME, name, pEVR, pFlags);
|
||||||
if (provides && providesEVR && provideFlags)
|
if (rpmdsFind(hds, nvrds) >= 0) {
|
||||||
for (i = 0; i < providesCount; i++) {
|
|
||||||
if (!(provides[i] && providesEVR[i]))
|
|
||||||
continue;
|
|
||||||
if (!(provideFlags[i] == RPMSENSE_EQUAL &&
|
|
||||||
!strcmp(name, provides[i]) && !strcmp(pEVR, providesEVR[i])))
|
|
||||||
continue;
|
|
||||||
bingo = 0;
|
bingo = 0;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
rpmdsFree(hds);
|
||||||
|
rpmdsFree(nvrds);
|
||||||
|
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
provides = hfd(provides, pnt);
|
|
||||||
providesEVR = hfd(providesEVR, pvt);
|
|
||||||
|
|
||||||
if (bingo) {
|
if (bingo) {
|
||||||
xx = headerAddOrAppendEntry(h, RPMTAG_PROVIDENAME, RPM_STRING_ARRAY_TYPE,
|
headerAddOrAppendEntry(h, RPMTAG_PROVIDENAME, RPM_STRING_ARRAY_TYPE,
|
||||||
&name, 1);
|
&name, 1);
|
||||||
xx = headerAddOrAppendEntry(h, RPMTAG_PROVIDEFLAGS, RPM_INT32_TYPE,
|
headerAddOrAppendEntry(h, RPMTAG_PROVIDEFLAGS, RPM_INT32_TYPE,
|
||||||
&pFlags, 1);
|
&pFlags, 1);
|
||||||
xx = headerAddOrAppendEntry(h, RPMTAG_PROVIDEVERSION, RPM_STRING_ARRAY_TYPE,
|
headerAddOrAppendEntry(h, RPMTAG_PROVIDEVERSION, RPM_STRING_ARRAY_TYPE,
|
||||||
&pEVR, 1);
|
&pEVR, 1);
|
||||||
}
|
}
|
||||||
|
rpmtdFreeData(&pnames);
|
||||||
free(pEVR);
|
free(pEVR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue