Avoid using/modifying fsm->li when freeing hard link sets
authorPanu Matilainen <pmatilai@redhat.com>
Mon, 1 Oct 2012 08:39:47 +0000 (11:39 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Mon, 1 Oct 2012 08:39:47 +0000 (11:39 +0300)
- Using a "global" variable for local iteration is...

lib/fsm.c

index 4d1db7f..ac267d1 100644 (file)
--- a/lib/fsm.c
+++ b/lib/fsm.c
@@ -600,6 +600,7 @@ static FSM_t fsmNew(fileStage goal, rpmfs fs, rpmfi fi, char ** failedFile)
 
 static FSM_t fsmFree(FSM_t fsm)
 {
+    hardLink_t li;
     fsm->buf = _free(fsm->buf);
     fsm->bufsize = 0;
 
@@ -608,10 +609,11 @@ static FSM_t fsmFree(FSM_t fsm)
 
     fsm->path = _free(fsm->path);
     fsm->suffix = _free(fsm->suffix);
-    while ((fsm->li = fsm->links) != NULL) {
-       fsm->links = fsm->li->next;
-       fsm->li->next = NULL;
-       fsm->li = freeHardLink(fsm->li);
+
+    while ((li = fsm->links) != NULL) {
+       fsm->links = li->next;
+       li->next = NULL;
+       freeHardLink(li);
     }
     free(fsm);
     return NULL;