From 8bdd462b50b7930c94cd7c59ac068934f60cffcf Mon Sep 17 00:00:00 2001 From: Panu Matilainen Date: Tue, 18 Dec 2007 10:10:03 +0200 Subject: [PATCH] Make fsm failedFile non-const like it really is - callers need to free it so const is wrong - cast away the hardlink-hackery in fsm instead --- build/pack.c | 2 +- lib/fsm.c | 12 +++++++++--- lib/fsm.h | 6 +++--- lib/psm.c | 8 ++------ 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/build/pack.c b/build/pack.c index 7066a7efb..34a3e152d 100644 --- a/build/pack.c +++ b/build/pack.c @@ -48,7 +48,7 @@ static rpmRC cpio_doio(FD_t fdo, Header h, CSA_t csa, { rpmts ts = rpmtsCreate(); rpmfi fi = csa->cpioList; - const char *failedFile = NULL; + char *failedFile = NULL; FD_t cfd; rpmRC rc = RPMRC_OK; int xx; diff --git a/lib/fsm.c b/lib/fsm.c index b9a7fe30f..275053167 100644 --- a/lib/fsm.c +++ b/lib/fsm.c @@ -493,7 +493,7 @@ FSM_t freeFSM(FSM_t fsm) int fsmSetup(FSM_t fsm, fileStage goal, const rpmts ts, const rpmfi fi, FD_t cfd, - unsigned int * archiveSize, const char ** failedFile) + unsigned int * archiveSize, char ** failedFile) { size_t pos = 0; int rc, ec = 0; @@ -1844,7 +1844,8 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; /* Notify on success. */ if (!rc) rc = fsmNext(fsm, FSM_NOTIFY); else if (fsm->failedFile && *fsm->failedFile == NULL) { - *fsm->failedFile = fsm->path; + /* XXX ick, stripping const */ + *fsm->failedFile = (char *) fsm->path; fsm->path = NULL; } break; @@ -1865,7 +1866,12 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; if (fsm->failedFile && *fsm->failedFile == NULL) { fsm->ix = fsm->li->filex[i]; if (!fsmNext(fsm, FSM_MAP)) { - *fsm->failedFile = fsm->path; + /* + * XXX ick, stripping const. Out-of-sync + * hardlinks handled as sub-state, see + * changeset 4062:02b0c237b675 + */ + *fsm->failedFile = (char *) fsm->path; fsm->path = NULL; } } diff --git a/lib/fsm.h b/lib/fsm.h index aff13a9db..9e7450324 100644 --- a/lib/fsm.h +++ b/lib/fsm.h @@ -131,7 +131,7 @@ struct fsm_s { hardLink_t links; /*!< Pending hard linked file(s). */ hardLink_t li; /*!< Current hard linked file(s). */ unsigned int * archiveSize; /*!< Pointer to archive size. */ - const char ** failedFile; /*!< First file name that failed. */ + char ** failedFile; /*!< First file name that failed. */ const char * subdir; /*!< Current file sub-directory. */ char subbuf[64]; /* XXX eliminate */ const char * osuffix; /*!< Old, preserved, file suffix. */ @@ -204,7 +204,7 @@ FSM_t freeFSM(FSM_t fsm); * @param fi transaction element file info * @param cfd * @retval archiveSize pointer to archive size - * @retval failedFile pointer to first file name that failed. + * @retval failedFile pointer to first file name that failed (malloced) * @return 0 on success */ int fsmSetup(FSM_t fsm, fileStage goal, @@ -212,7 +212,7 @@ int fsmSetup(FSM_t fsm, fileStage goal, const rpmfi fi, FD_t cfd, unsigned int * archiveSize, - const char ** failedFile); + char ** failedFile); /** * Clean file state machine. diff --git a/lib/psm.c b/lib/psm.c index 58bfcc9d2..90a7abe92 100644 --- a/lib/psm.c +++ b/lib/psm.c @@ -54,7 +54,7 @@ struct rpmpsm_s { rpmdbMatchIterator mi; const char * stepName; char * rpmio_flags; - const char * failedFile; + char * failedFile; char * pkgURL; /*!< Repackage URL. */ const char * pkgfn; /*!< Repackage file name. */ int scriptTag; /*!< Scriptlet data tag. */ @@ -1886,11 +1886,7 @@ assert(psm->mi == NULL); psm->oh = headerFree(psm->oh); psm->pkgURL = _free(psm->pkgURL); psm->rpmio_flags = _free(psm->rpmio_flags); - /* - * XXX: funny games with fsm internal state, see changesets - * 7340:77828be0ce85 and 4062:02b0c237b675 - */ - psm->failedFile = _constfree(psm->failedFile); + psm->failedFile = _free(psm->failedFile); fi->fgroup = hfd(fi->fgroup, RPM_FORCEFREE_TYPE); fi->fuser = hfd(fi->fuser, RPM_FORCEFREE_TYPE);