From 55bff19b7692e01a0bf276c742c77f03fb445160 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 11 Jan 2011 18:52:30 -0600 Subject: Unify two free diskspace error messages Although they won't be the same in the gettext catalog because of the '\n' we should still use the same text. Signed-off-by: Dan McGee --- lib/libalpm/error.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/libalpm/error.c b/lib/libalpm/error.c index 4dab9fa5..1b144a5a 100644 --- a/lib/libalpm/error.c +++ b/lib/libalpm/error.c @@ -58,7 +58,7 @@ const char SYMEXPORT *alpm_strerror(int err) case PM_ERR_WRONG_ARGS: return _("wrong or NULL argument passed"); case PM_ERR_DISK_SPACE: - return _("not enough disk space"); + return _("not enough free disk space"); /* Interface */ case PM_ERR_HANDLE_NULL: return _("library not initialized"); -- cgit v1.2.3-70-g09d2 From 6942bba75db596a70d5ba408785bf461e691bc9c Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 11 Jan 2011 19:49:27 -0600 Subject: Add error message stating which partition is full This is helpful anyway to the user, and should also be helpful to us if we see problems cropping up in the check during development. Also add a missing ->used = 0 initialization in the code path less taken. Signed-off-by: Dan McGee --- lib/libalpm/diskspace.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/libalpm/diskspace.c b/lib/libalpm/diskspace.c index bc5f5127..b3c340af 100644 --- a/lib/libalpm/diskspace.c +++ b/lib/libalpm/diskspace.c @@ -84,8 +84,8 @@ static alpm_list_t *mount_point_list(void) mp->mount_dir = strdup(mnt->mnt_dir); memcpy(&(mp->fsp), &fsp, sizeof(FSSTATSTYPE)); - mp->blocks_needed = 0; - mp->max_blocks_needed = 0; + mp->blocks_needed = 0l; + mp->max_blocks_needed = 0l; mp->used = 0; mount_points = alpm_list_add(mount_points, mp); @@ -107,8 +107,9 @@ static alpm_list_t *mount_point_list(void) mp->mount_dir = strdup(fsp->f_mntonname); memcpy(&(mp->fsp), fsp, sizeof(FSSTATSTYPE)); - mp->blocks_needed = 0; - mp->max_blocks_needed = 0; + mp->blocks_needed = 0l; + mp->max_blocks_needed = 0l; + mp->used = 0; mount_points = alpm_list_add(mount_points, mp); } @@ -178,8 +179,7 @@ static int calculate_removed_size(const alpm_list_t *mount_points, data = mp->data; /* the addition of (divisor - 1) performs ceil() with integer division */ data->blocks_needed -= - (st.st_size + data->fsp.f_bsize - 1) / data->fsp.f_bsize; - data->used = 1; + (st.st_size + data->fsp.f_bsize - 1l) / data->fsp.f_bsize; } return(0); @@ -230,7 +230,7 @@ static int calculate_installed_size(const alpm_list_t *mount_points, data = mp->data; /* the addition of (divisor - 1) performs ceil() with integer division */ data->blocks_needed += - (archive_entry_size(entry) + data->fsp.f_bsize - 1) / data->fsp.f_bsize; + (archive_entry_size(entry) + data->fsp.f_bsize - 1l) / data->fsp.f_bsize; data->used = 1; } @@ -306,6 +306,9 @@ int _alpm_check_diskspace(pmtrans_t *trans, pmdb_t *db_local) (unsigned long)data->fsp.f_bfree); if(data->max_blocks_needed + cushion >= 0 && (unsigned long)(data->max_blocks_needed + cushion) > data->fsp.f_bfree) { + _alpm_log(PM_LOG_ERROR, _("Partition %s too full: %ld blocks needed, %ld blocks free)\n"), + data->mount_dir, data->max_blocks_needed + cushion, + (unsigned long)data->fsp.f_bfree); abort = 1; } } -- cgit v1.2.3-70-g09d2 From 25fab402c79aeaa5b72959c7bfd2e541a1b34045 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 11 Jan 2011 21:13:04 -0600 Subject: Call archive_read_data_skip() while checking diskspace libarchive eventually calls it anyway, but backtraces make a lot more sense if we call it, as well as matching our precedent from alpm_pkg_load(). Signed-off-by: Dan McGee --- lib/libalpm/diskspace.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/libalpm/diskspace.c b/lib/libalpm/diskspace.c index b3c340af..dfafdac0 100644 --- a/lib/libalpm/diskspace.c +++ b/lib/libalpm/diskspace.c @@ -232,6 +232,13 @@ static int calculate_installed_size(const alpm_list_t *mount_points, data->blocks_needed += (archive_entry_size(entry) + data->fsp.f_bsize - 1l) / data->fsp.f_bsize; data->used = 1; + + if(archive_read_data_skip(archive)) { + _alpm_log(PM_LOG_ERROR, _("error while reading package %s: %s\n"), + pkg->name, archive_error_string(archive)); + pm_errno = PM_ERR_LIBARCHIVE; + break; + } } archive_read_finish(archive); -- cgit v1.2.3-70-g09d2