diff options
-rw-r--r-- | lib/libalpm/diskspace.c | 5 | ||||
-rw-r--r-- | lib/libalpm/diskspace.h | 7 |
2 files changed, 9 insertions, 3 deletions
diff --git a/lib/libalpm/diskspace.c b/lib/libalpm/diskspace.c index c8c35742..253e1185 100644 --- a/lib/libalpm/diskspace.c +++ b/lib/libalpm/diskspace.c @@ -175,6 +175,7 @@ static int calculate_removed_size(const alpm_list_t *mount_points, /* the addition of (divisor - 1) performs ceil() with integer division */ mp->blocks_needed -= (st.st_size + mp->fsp.f_bsize - 1l) / mp->fsp.f_bsize; + mp->used |= USED_REMOVE; } return(0); @@ -236,7 +237,7 @@ static int calculate_installed_size(const alpm_list_t *mount_points, /* the addition of (divisor - 1) performs ceil() with integer division */ mp->blocks_needed += (archive_entry_size(entry) + mp->fsp.f_bsize - 1l) / mp->fsp.f_bsize; - mp->used = 1; + mp->used |= USED_INSTALL; if(archive_read_data_skip(archive)) { _alpm_log(PM_LOG_ERROR, _("error while reading package %s: %s\n"), @@ -311,7 +312,7 @@ int _alpm_check_diskspace(pmtrans_t *trans, pmdb_t *db_local) _alpm_log(PM_LOG_ERROR, _("Partition %s is mounted read only\n"), data->mount_dir); abort = 1; - } else if(data->used) { + } else if(data->used & USED_INSTALL) { /* cushion is roughly min(5% capacity, 20MiB) */ long fivepc = ((long)data->fsp.f_blocks / 20) + 1; long twentymb = (20 * 1024 * 1024 / (long)data->fsp.f_bsize) + 1; diff --git a/lib/libalpm/diskspace.h b/lib/libalpm/diskspace.h index 7c7dcebd..2894a0c2 100644 --- a/lib/libalpm/diskspace.h +++ b/lib/libalpm/diskspace.h @@ -29,6 +29,11 @@ #include "alpm.h" +enum mount_used_level { + USED_REMOVE = 1, + USED_INSTALL = (1 << 1), +}; + typedef struct __alpm_mountpoint_t { /* mount point information */ char *mount_dir; @@ -36,7 +41,7 @@ typedef struct __alpm_mountpoint_t { /* storage for additional disk usage calculations */ long blocks_needed; long max_blocks_needed; - int used; + enum mount_used_level used; int read_only; FSSTATSTYPE fsp; } alpm_mountpoint_t; |