*/
struct fsmIterator_s {
rpmts ts; /*!< transaction set. */
- rpmte te; /*!< transaction element. */
+ rpmfs fs; /*!< file state info. */
rpmfi fi; /*!< transaction element file info. */
int reverse; /*!< reversed traversal? */
int isave; /*!< last returned iterator index. */
return (iter ? iter->fi : NULL);
}
-static rpmte fsmGetTe(const FSM_t fsm)
+static rpmfs fsmGetFs(const FSM_t fsm)
{
const FSMI_t iter = fsm->iter;
- return (iter ? iter->te : NULL);
+ return (iter ? iter->fs : NULL);
}
#define SUFFIX_RPMORIG ".rpmorig"
{
if (iter) {
iter->ts = rpmtsFree(iter->ts);
- iter->te = NULL; /* XXX rpmte is not refcounted yet */
+ iter->fs = NULL; /* rpmfs is not refcounted */
iter->fi = rpmfiFree(iter->fi);
free(iter);
}
* @return file info iterator
*/
static FSMI_t
-mapInitIterator(rpmts ts, rpmte te, rpmfi fi)
+mapInitIterator(rpmts ts, rpmfs fs, rpmfi fi, int reverse)
{
FSMI_t iter = NULL;
iter = xcalloc(1, sizeof(*iter));
iter->ts = rpmtsLink(ts);
- iter->te = te; /* XXX rpmte is not refcounted yet */
+ iter->fs = fs; /* rpmfs is not refcounted */
iter->fi = rpmfiLink(fi);
- iter->reverse = (rpmteType(te) == TR_REMOVED);
+ iter->reverse = reverse;
iter->i = (iter->reverse ? (rpmfiFC(fi) - 1) : 0);
iter->isave = iter->i;
return iter;
i = fsm->ix;
if (fi && i >= 0 && i < rpmfiFC(fi)) {
- rpmte te = fsmGetTe(fsm);
- rpmfs fs = rpmteGetFileStates(te);
+ rpmfs fs = fsmGetFs(fsm);
/* XXX these should use rpmfiFFlags() etc */
fsm->action = rpmfsGetAction(fs, i);
fsm->fflags = rpmfiFFlagsIndex(fi, i);
return 1;
/* Here come the bits, time to choose a non-skipped file name. */
- { rpmfs fs = rpmteGetFileStates(fsmGetTe(fsm));
+ { rpmfs fs = fsmGetFs(fsm);
for (j = fsm->li->linksLeft - 1; j >= 0; j--) {
ix = fsm->li->filex[j];
return rc;
}
-static FSM_t fsmNew(fileStage goal, rpmts ts, rpmte te, rpmfi fi,
+static FSM_t fsmNew(fileStage goal, rpmts ts, rpmfs fs, rpmfi fi,
char ** failedFile)
{
FSM_t fsm = xcalloc(1, sizeof(*fsm));
fsm->ix = -1;
fsm->goal = goal;
- fsm->iter = mapInitIterator(ts, te, fi);
+ fsm->iter = mapInitIterator(ts, fs, fi, (goal == FSM_PKGERASE));
fsm->sehandle = rpmtsSELabelHandle(ts);
/* common flags for all modes */
int rpmPackageFilesInstall(rpmts ts, rpmte te, rpmfi fi, FD_t cfd,
rpmpsm psm, char ** failedFile)
{
- FSM_t fsm = fsmNew(FSM_PKGINSTALL, ts, te, fi, failedFile);
+ rpmfs fs = rpmteGetFileStates(te);
+ FSM_t fsm = fsmNew(FSM_PKGINSTALL, ts, fs, fi, failedFile);
rpmcpio_t archive = rpmcpioOpen(cfd, O_RDONLY);
struct stat * st = &fsm->sb;
int saveerrno = errno;
int rpmPackageFilesRemove(rpmts ts, rpmte te, rpmfi fi,
rpmpsm psm, char ** failedFile)
{
- FSM_t fsm = fsmNew(FSM_PKGERASE, ts, te, fi, failedFile);
+ rpmfs fs = rpmteGetFileStates(te);
+ FSM_t fsm = fsmNew(FSM_PKGERASE, ts, fs, fi, failedFile);
int rc = 0;
if (!rpmteIsSource(te))
int rpmPackageFilesArchive(rpmts ts, rpmte te, rpmfi fi, FD_t cfd,
rpm_loff_t * archiveSize, char ** failedFile)
{
- FSM_t fsm = fsmNew(FSM_PKGBUILD, ts, te, fi, failedFile);;
+ rpmfs fs = rpmteGetFileStates(te);
+ FSM_t fsm = fsmNew(FSM_PKGBUILD, ts, fs, fi, failedFile);;
rpmcpio_t archive = rpmcpioOpen(cfd, O_WRONLY);
int rc = 0;
if (archive == NULL) {
rc = CPIOERR_INTERNAL;
} else {
- rpmfs fs = rpmteGetFileStates(te);
int ghost, i, fc = rpmfiFC(fi);
/* XXX Is this actually still needed? */