Yank rpmfi state update out of rpmtsRun()
- stuff it into internal rpmfiUpdateState() function to get it out of sight for now, the mechanism needs some...
This commit is contained in:
parent
ee59836299
commit
2835e091ae
43
lib/rpmfi.c
43
lib/rpmfi.c
|
@ -1405,3 +1405,46 @@ fprintf(stderr, "*** fi %p\t%s[%d]\n", fi, Type, (fi ? fi->fc : 0));
|
||||||
/* FIX: rpmfi null annotations */
|
/* FIX: rpmfi null annotations */
|
||||||
return rpmfiLink(fi, (fi ? fi->Type : NULL));
|
return rpmfiLink(fi, (fi ? fi->Type : NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rpmfi rpmfiUpdateState(rpmfi fi, rpmts ts, rpmte p)
|
||||||
|
{
|
||||||
|
char * fstates = fi->fstates;
|
||||||
|
rpmFileAction * actions = fi->actions;
|
||||||
|
sharedFileInfo replaced = fi->replaced;
|
||||||
|
rpmte savep;
|
||||||
|
int numShared = 0;
|
||||||
|
|
||||||
|
if (replaced != NULL) {
|
||||||
|
for (; replaced->otherPkg; replaced++) {
|
||||||
|
numShared++;
|
||||||
|
}
|
||||||
|
if (numShared > 0) {
|
||||||
|
replaced = xcalloc(numShared + 1, sizeof(*fi->replaced));
|
||||||
|
memcpy(replaced, fi->replaced,
|
||||||
|
sizeof(*fi->replaced) * (numShared + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fi->fstates = NULL;
|
||||||
|
fi->actions = NULL;
|
||||||
|
fi->replaced = NULL;
|
||||||
|
/* FIX: fi->actions is NULL */
|
||||||
|
fi = rpmfiFree(fi);
|
||||||
|
|
||||||
|
savep = rpmtsSetRelocateElement(ts, p);
|
||||||
|
fi = rpmfiNew(ts, p->h, RPMTAG_BASENAMES, RPMFI_KEEPHEADER);
|
||||||
|
(void) rpmtsSetRelocateElement(ts, savep);
|
||||||
|
|
||||||
|
if (fi != NULL) { /* XXX can't happen */
|
||||||
|
fi->te = p;
|
||||||
|
free(fi->fstates);
|
||||||
|
fi->fstates = fstates;
|
||||||
|
free(fi->actions);
|
||||||
|
fi->actions = actions;
|
||||||
|
if (replaced != NULL)
|
||||||
|
fi->replaced = replaced;
|
||||||
|
p->fi = fi;
|
||||||
|
}
|
||||||
|
return fi;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -113,5 +113,8 @@ struct rpmfi_s {
|
||||||
int nrefs; /*!< Reference count. */
|
int nrefs; /*!< Reference count. */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
RPM_GNUC_INTERNAL
|
||||||
|
rpmfi rpmfiUpdateState(rpmfi fi, rpmts ts, rpmte p);
|
||||||
|
|
||||||
#endif /* _RPMFI_INTERNAL_H */
|
#endif /* _RPMFI_INTERNAL_H */
|
||||||
|
|
||||||
|
|
|
@ -1270,46 +1270,7 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
|
||||||
* XXX around a recreated file info set.
|
* XXX around a recreated file info set.
|
||||||
*/
|
*/
|
||||||
rpmpsmSetFI(psm, NULL);
|
rpmpsmSetFI(psm, NULL);
|
||||||
{
|
fi = rpmfiUpdateState(fi, ts, p);
|
||||||
char * fstates = fi->fstates;
|
|
||||||
rpmFileAction * actions = fi->actions;
|
|
||||||
sharedFileInfo replaced = fi->replaced;
|
|
||||||
rpmte savep;
|
|
||||||
int numShared = 0;
|
|
||||||
|
|
||||||
if (replaced != NULL) {
|
|
||||||
for (; replaced->otherPkg; replaced++) {
|
|
||||||
numShared++;
|
|
||||||
}
|
|
||||||
if (numShared > 0) {
|
|
||||||
replaced = xcalloc(numShared + 1,
|
|
||||||
sizeof(*fi->replaced));
|
|
||||||
memcpy(replaced, fi->replaced,
|
|
||||||
sizeof(*fi->replaced) * (numShared + 1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fi->fstates = NULL;
|
|
||||||
fi->actions = NULL;
|
|
||||||
fi->replaced = NULL;
|
|
||||||
/* FIX: fi->actions is NULL */
|
|
||||||
fi = rpmfiFree(fi);
|
|
||||||
|
|
||||||
savep = rpmtsSetRelocateElement(ts, p);
|
|
||||||
fi = rpmfiNew(ts, p->h, RPMTAG_BASENAMES, RPMFI_KEEPHEADER);
|
|
||||||
(void) rpmtsSetRelocateElement(ts, savep);
|
|
||||||
|
|
||||||
if (fi != NULL) { /* XXX can't happen */
|
|
||||||
fi->te = p;
|
|
||||||
fi->fstates = _free(fi->fstates);
|
|
||||||
fi->fstates = fstates;
|
|
||||||
fi->actions = _free(fi->actions);
|
|
||||||
fi->actions = actions;
|
|
||||||
if (replaced != NULL)
|
|
||||||
fi->replaced = replaced;
|
|
||||||
p->fi = fi;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rpmpsmSetFI(psm, p->fi);
|
rpmpsmSetFI(psm, p->fi);
|
||||||
|
|
||||||
/* FIX: psm->fi may be NULL */
|
/* FIX: psm->fi may be NULL */
|
||||||
|
|
Loading…
Reference in New Issue