summaryrefslogtreecommitdiffstats
path: root/lib/libalpm/diskspace.c
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2011-09-08 03:43:49 +0200
committerDan McGee <dan@archlinux.org>2011-09-08 04:05:04 +0200
commit8ffa2b24a5e3d63d6f34a1257ed67904ec051e3d (patch)
tree0fa0ee4e513c2207af8f40eff705b18848906630 /lib/libalpm/diskspace.c
parentb961ebe16ffb75bb947a193daa9e9fe639b6403d (diff)
downloadpacman-8ffa2b24a5e3d63d6f34a1257ed67904ec051e3d.tar.gz
pacman-8ffa2b24a5e3d63d6f34a1257ed67904ec051e3d.tar.xz
Use more correct integer types in diskspace checks
This adjusts type usage to match POSIX provided types from <sys/types.h> rather than assuming everything will fit in a long or unsigned long. Use fsblkcnt_t (unsigned) and blkcnt_t (signed) as appropriate. These are affected the same way off_t is on 32 bit platforms, where the types are extende to 64 bits if large file support is enabled. Because most numbers here are block counts, this isn't near as pressing as using a 32-bit variable for file sizes where anything over 2GiB can burn you; we likely can support files at least 512 but mainly 4096 times larger. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'lib/libalpm/diskspace.c')
-rw-r--r--lib/libalpm/diskspace.c29
1 files changed, 15 insertions, 14 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;
}
}