summaryrefslogtreecommitdiff
path: root/lib/libalpm
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2008-02-13 22:42:34 -0600
committerDan McGee <dan@archlinux.org>2008-02-13 22:52:53 -0600
commitb206aaee881abd6e256428f2146212cfc1c69be2 (patch)
treef98a568ce0924d62f8e3779a02bd7058ff9eb7f3 /lib/libalpm
parentf4ac63ab43a277cdc6a409c0bd6f0d04c1791882 (diff)
Ensure DESC infolevel is loaded before checking pkg->filename
This is the first step of fixing FS#9547. This should not break any existing code that may rely on this function behaving the way it did, and should be good for inclusion in a maint release. In addition, update pactest so it fills the FILENAME field in the DB entries it creates so we can move forward with a real fix to this issue. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'lib/libalpm')
-rw-r--r--lib/libalpm/be_files.c4
-rw-r--r--lib/libalpm/package.c7
2 files changed, 4 insertions, 7 deletions
diff --git a/lib/libalpm/be_files.c b/lib/libalpm/be_files.c
index 724e3c8f..4cd0985e 100644
--- a/lib/libalpm/be_files.c
+++ b/lib/libalpm/be_files.c
@@ -297,10 +297,6 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
}
_alpm_strtrim(line);
if(!strcmp(line, "%FILENAME%")) {
- /* filename is _new_ - it provides the real name of the package, on the
- * server, to allow for us to not tie the name of the actual file to the
- * data of the package
- */
if(fgets(info->filename, sizeof(info->filename), fp) == NULL) {
goto error;
}
diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
index 937ee3e0..363cf313 100644
--- a/lib/libalpm/package.c
+++ b/lib/libalpm/package.c
@@ -162,11 +162,12 @@ const char SYMEXPORT *alpm_pkg_get_filename(pmpkg_t *pkg)
ASSERT(handle != NULL, return(NULL));
ASSERT(pkg != NULL, return(NULL));
+ if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
+ _alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
+ }
+
if(!strlen(pkg->filename)) {
/* construct the file name, it's not in the desc file */
- if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
- _alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
- }
if(pkg->arch && strlen(pkg->arch) > 0) {
snprintf(pkg->filename, PKG_FILENAME_LEN, "%s-%s-%s" PKGEXT,
pkg->name, pkg->version, pkg->arch);