summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libalpm/diskspace.c29
-rw-r--r--lib/libalpm/diskspace.h7
2 files changed, 20 insertions, 16 deletions
diff --git a/lib/libalpm/diskspace.c b/lib/libalpm/diskspace.c
index 480c85f6..df414ab9 100644
--- a/lib/libalpm/diskspace.c
+++ b/lib/libalpm/diskspace.c
@@ -179,7 +179,7 @@ static int calculate_removed_size(alpm_handle_t *handle,
/* 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;
+ (st.st_size + mp->fsp.f_bsize - 1) / mp->fsp.f_bsize;
mp->used |= USED_REMOVE;
}
@@ -225,7 +225,7 @@ static int calculate_installed_size(alpm_handle_t *handle,
/* the addition of (divisor - 1) performs ceil() with integer division */
mp->blocks_needed +=
- (file->size + mp->fsp.f_bsize - 1l) / mp->fsp.f_bsize;
+ (file->size + mp->fsp.f_bsize - 1) / mp->fsp.f_bsize;
mp->used |= USED_INSTALL;
}
@@ -301,18 +301,19 @@ int _alpm_check_diskspace(alpm_handle_t *handle)
error = 1;
} 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;
- long cushion = fivepc < twentymb ? fivepc : twentymb;
-
- _alpm_log(handle, ALPM_LOG_DEBUG, "partition %s, needed %ld, cushion %ld, free %ld\n",
- data->mount_dir, data->max_blocks_needed, cushion,
- (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(handle, ALPM_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);
+ fsblkcnt_t fivepc = (data->fsp.f_blocks / 20) + 1;
+ fsblkcnt_t twentymb = (20 * 1024 * 1024 / data->fsp.f_bsize) + 1;
+ fsblkcnt_t cushion = fivepc < twentymb ? fivepc : twentymb;
+ blkcnt_t needed = data->max_blocks_needed + cushion;
+
+ _alpm_log(handle, ALPM_LOG_DEBUG,
+ "partition %s, needed %jd, cushion %ju, free %ju\n",
+ data->mount_dir, (intmax_t)data->max_blocks_needed,
+ (uintmax_t)cushion, (uintmax_t)data->fsp.f_bfree);
+ if(needed >= 0 && (fsblkcnt_t)needed > data->fsp.f_bfree) {
+ _alpm_log(handle, ALPM_LOG_ERROR,
+ _("Partition %s too full: %jd blocks needed, %jd blocks free\n"),
+ data->mount_dir, (intmax_t)needed, (uintmax_t)data->fsp.f_bfree);
error = 1;
}
}
diff --git a/lib/libalpm/diskspace.h b/lib/libalpm/diskspace.h
index 79e16772..5944bb17 100644
--- a/lib/libalpm/diskspace.h
+++ b/lib/libalpm/diskspace.h
@@ -26,6 +26,9 @@
#if defined(HAVE_SYS_STATVFS_H)
#include <sys/statvfs.h>
#endif
+#if defined(HAVE_SYS_TYPES_H)
+#include <sys/types.h>
+#endif
#include "alpm.h"
@@ -39,8 +42,8 @@ typedef struct __alpm_mountpoint_t {
char *mount_dir;
size_t mount_dir_len;
/* storage for additional disk usage calculations */
- long blocks_needed;
- long max_blocks_needed;
+ blkcnt_t blocks_needed;
+ blkcnt_t max_blocks_needed;
enum mount_used_level used;
int read_only;
FSSTATSTYPE fsp;