[pacman-dev] [PATCH 4/4 v2] Check the version of the local database during validation
Andrew Gregory
andrew.gregory.8 at gmail.com
Mon Sep 22 09:33:18 EDT 2014
On 09/22/14 at 10:45pm, Allan McRae wrote:
> When we check the database version directly, there is no longer a
> need to scan for depends files.
>
> Signed-off-by: Allan McRae <allan at archlinux.org>
> ---
>
> It is much easier to look at the before and after here instead of the patch directly.
>
> lib/libalpm/be_local.c | 25 ++++++++-----------------
> 1 file changed, 8 insertions(+), 17 deletions(-)
>
> diff --git a/lib/libalpm/be_local.c b/lib/libalpm/be_local.c
> index 1707a76..2b7260e 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;
> @@ -453,26 +455,15 @@ 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);
> + (void)t;
>
> - if(strcmp(name, ".") == 0 || strcmp(name, "..") == 0) {
> - continue;
> - }
> - if(!is_dir(dbpath, ent)) {
> - continue;
> - }
> + fclose(dbverfile);
>
> - 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) {
Add a check for t here to make sure fscanf succeeded. If fscanf
failed there's no telling what's in version, and you can get rid of
the (void)t.
> + goto version_error;
> }
> - /* we found no depends file after full scan */
>
> version_latest:
> closedir(dbdir);
> --
> 2.1.0
More information about the pacman-dev
mailing list