From d02efd2f204cfdd99d6e161b1ce9d4478b08b8e2 Mon Sep 17 00:00:00 2001 From: Allan McRae Date: Tue, 16 Jul 2013 21:51:16 +1000 Subject: 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 --- lib/libalpm/be_local.c | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) (limited to 'lib/libalpm/be_local.c') 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); -- cgit v1.2.3-24-g4f1b