From d1cc1ef6c31dc193adcf48a9aea4a95830c7ae56 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 15 Feb 2011 16:56:44 -0600 Subject: Fix some database size estimation problems * Use stat() and not lstat(); we don't care for the size of the symlink if it is one, we want the size of the reference file. * FS#22896, fix local database estimation on platforms that don't abide by the nlink assumption for number of children. * Fix a missing newline on an error message. Signed-off-by: Dan McGee --- lib/libalpm/be_sync.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'lib/libalpm/be_sync.c') diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c index 4e9b4d31..69f7663d 100644 --- a/lib/libalpm/be_sync.c +++ b/lib/libalpm/be_sync.c @@ -171,7 +171,7 @@ static int sync_db_read(pmdb_t *db, struct archive *archive, * Unweighted Avg 2543.39 118.74 190.16 137.93 * Average of Avgs 2564.44 124.08 191.06 143.46 */ -static int estimate_package_count(struct stat *st, struct archive *archive) +static size_t estimate_package_count(struct stat *st, struct archive *archive) { unsigned int per_package; @@ -199,12 +199,13 @@ static int estimate_package_count(struct stat *st, struct archive *archive) /* assume it is at least somewhat compressed */ per_package = 200; } - return((int)(st->st_size / per_package) + 1); + return((size_t)(st->st_size / per_package) + 1); } static int sync_db_populate(pmdb_t *db) { - int est_count, count = 0; + size_t est_count; + int count = 0; struct stat buf; struct archive *archive; struct archive_entry *entry; @@ -227,7 +228,7 @@ static int sync_db_populate(pmdb_t *db) archive_read_finish(archive); RET_ERR(PM_ERR_DB_OPEN, 1); } - if(lstat(_alpm_db_path(db), &buf) != 0) { + if(stat(_alpm_db_path(db), &buf) != 0) { RET_ERR(PM_ERR_DB_OPEN, 1); } est_count = estimate_package_count(&buf, archive); -- cgit v1.2.3-24-g4f1b