summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2007-12-18 10:10:03 +0200
committerPanu Matilainen <pmatilai@redhat.com>2007-12-18 10:10:03 +0200
commit8bdd462b50b7930c94cd7c59ac068934f60cffcf (patch)
treefb65265a21ae96be3f062de20615c1dee951c0a8 /lib
parent28723cae06d49e4ba2401199da47763b1fc28ef8 (diff)
downloadlibrpm-tizen-8bdd462b50b7930c94cd7c59ac068934f60cffcf.tar.gz
librpm-tizen-8bdd462b50b7930c94cd7c59ac068934f60cffcf.tar.bz2
librpm-tizen-8bdd462b50b7930c94cd7c59ac068934f60cffcf.zip
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
Diffstat (limited to 'lib')
-rw-r--r--lib/fsm.c12
-rw-r--r--lib/fsm.h6
-rw-r--r--lib/psm.c8
3 files changed, 14 insertions, 12 deletions
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);