ensure chk_fileconflicts reads entire file list

If the end of the pB list was reached before the end of pA, we failed to
read any remaining files from the pA list. Add an additional loop to ensure
all entries of pA are added to the return list regardless of whether we have
reached the end of pB.

This new loop also eliminates the now-unnecessary check for a null pB, as we
need to ensure we are excluding directories in the resulting output anyway.

Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Dan McGee 2008-02-11 09:51:34 -06:00
parent 7586072beb
commit fbf3beb8d2
2 changed files with 26 additions and 4 deletions

View File

@ -251,10 +251,7 @@ static alpm_list_t *chk_filedifference(alpm_list_t *filesA, alpm_list_t *filesB)
alpm_list_t *ret = NULL;
alpm_list_t *pA = filesA, *pB = filesB;
if(pB == NULL) {
return(alpm_list_strdup(pA));
}
/* if both filesA and filesB have entries, do this loop */
while(pA && pB) {
const char *strA = pA->data;
const char *strB = pB->data;
@ -279,6 +276,15 @@ static alpm_list_t *chk_filedifference(alpm_list_t *filesA, alpm_list_t *filesB)
}
}
}
/* ensure we have completely emptied pA */
while(pA) {
const char *strA = pA->data;
/* skip directories */
if(strA[strlen(strA)-1] != '/') {
ret = alpm_list_add(ret, strdup(strA));
}
pA = pA->next;
}
return(ret);
}

View File

@ -0,0 +1,16 @@
self.description = "Upgrade a package with a filesystem conflict"
p = pmpkg("dummy", "2.0-1")
p.files = ["bin/dummy", "usr/share/file"]
self.addpkg(p)
lp = pmpkg("dummy", "1.0-1")
lp.files = ["bin/dummy"]
self.addpkg2db("local", lp)
self.filesystem = ["usr/share/file"]
self.args = "-U %s" % p.filename()
self.addrule("PACMAN_RETCODE=1")
self.addrule("PKG_VERSION=dummy|1.0-1")