diff options
author | Allan McRae <allan@archlinux.org> | 2013-07-16 13:51:16 +0200 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2014-09-23 13:43:05 +0200 |
commit | d02efd2f204cfdd99d6e161b1ce9d4478b08b8e2 (patch) | |
tree | da7c24edecabcea50f3ed6e3fef3b9ce9ca82552 | |
parent | 1660ed3cf9069f84d96670b5443a9f1542b7865d (diff) | |
download | pacman-d02efd2f204cfdd99d6e161b1ce9d4478b08b8e2.tar.gz pacman-d02efd2f204cfdd99d6e161b1ce9d4478b08b8e2.tar.xz |
Check the version of the local database during validation
When we check the database version directly, there is no longer a
need to scan for depends files.
Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r-- | lib/libalpm/be_local.c | 29 | ||||
-rw-r--r-- | test/pacman/pmtest.py | 2 |
2 files changed, 12 insertions, 19 deletions
diff --git a/lib/libalpm/be_local.c b/lib/libalpm/be_local.c index 857c984f..1b333e44 100644 --- a/lib/libalpm/be_local.c +++ b/lib/libalpm/be_local.c @@ -398,9 +398,11 @@ static int local_db_validate(alpm_db_t *db) { struct dirent *ent = NULL; const char *dbpath; + DIR *dbdir; char dbverpath[PATH_MAX]; FILE *dbverfile; - DIR *dbdir; + int t; + size_t version; if(db->status & DB_STATUS_VALID) { return 0; @@ -437,7 +439,7 @@ static int local_db_validate(alpm_db_t *db) db->status |= DB_STATUS_EXISTS; db->status &= ~DB_STATUS_MISSING; - snprintf(dbverpath, PATH_MAX, "%s.alpm_db_version", dbpath); + snprintf(dbverpath, PATH_MAX, "%sALPM_DB_VERSION", dbpath); if((dbverfile = fopen(dbverpath, "r")) == NULL) { /* create dbverfile if local database is empty - otherwise version error */ @@ -453,26 +455,17 @@ static int local_db_validate(alpm_db_t *db) local_db_add_version(db, dbpath); goto version_latest; } - fclose(dbverfile); - while((ent = readdir(dbdir)) != NULL) { - const char *name = ent->d_name; - char path[PATH_MAX]; + t = fscanf(dbverfile, "%zu", &version); + fclose(dbverfile); - if(strcmp(name, ".") == 0 || strcmp(name, "..") == 0) { - continue; - } - if(!is_dir(dbpath, ent)) { - continue; - } + if(t != 1) { + goto version_error; + } - snprintf(path, PATH_MAX, "%s%s/depends", dbpath, name); - if(access(path, F_OK) == 0) { - /* we found a depends file- bail */ - goto version_error; - } + if(version != ALPM_LOCAL_DB_VERSION) { + goto version_error; } - /* we found no depends file after full scan */ version_latest: closedir(dbdir); diff --git a/test/pacman/pmtest.py b/test/pacman/pmtest.py index 75a28d27..09baac7a 100644 --- a/test/pacman/pmtest.py +++ b/test/pacman/pmtest.py @@ -182,7 +182,7 @@ class pmtest(object): pkg.install_package(self.root) if self.db["local"].pkgs: path = os.path.join(self.root, util.PM_DBPATH, "local") - util.mkfile(path, ".alpm_db_version", "9") + util.mkfile(path, "ALPM_DB_VERSION", "9") # Done. vprint(" Taking a snapshot of the file system") |