From abc147f28e5310df4a4c2327f59c7eb65b611254 Mon Sep 17 00:00:00 2001
From: Sebastien GODARD <sysstat@users.noreply.github.com>
Date: Fri, 2 Jun 2017 09:38:40 +0200
Subject: [PATCH] Cast variables to target type before use
This patch casts some variables to target type before they are used.
Without this patch, problems may happen (like issue #150) notably on 32
bit architectures where sizeof(long) is different from sizeof(long
long).
Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
(cherry picked from commit 7a8306ad184cc2c2e9339c428a98773a7f818e3b)
---
rd_stats.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/rd_stats.c b/rd_stats.c
index 6aa8698..01276b6 100644
--- a/rd_stats.c
+++ b/rd_stats.c
@@ -532,7 +532,7 @@ void read_diskstats_io(struct stats_io *st_io)
* OK: It's a (real) device and not a partition.
* Note: Structure should have been initialized first!
*/
- st_io->dk_drive += rd_ios + wr_ios;
+ st_io->dk_drive += (unsigned long long) rd_ios + (unsigned long long) wr_ios;
st_io->dk_drive_rio += rd_ios;
st_io->dk_drive_rblk += rd_sec;
st_io->dk_drive_wio += wr_ios;
@@ -586,7 +586,7 @@ void read_diskstats_disk(struct stats_disk *st_disk, int nbr, int read_part)
st_disk_i = st_disk + dsk++;
st_disk_i->major = major;
st_disk_i->minor = minor;
- st_disk_i->nr_ios = rd_ios + wr_ios;
+ st_disk_i->nr_ios = (unsigned long long) rd_ios + (unsigned long long) wr_ios;
st_disk_i->rd_sect = rd_sec;
st_disk_i->wr_sect = wr_sec;
st_disk_i->rd_ticks = rd_ticks;
@@ -1950,11 +1950,11 @@ void read_filesystem(struct stats_filesystem *st_filesystem, int nbr)
continue;
st_filesystem_i = st_filesystem + fs++;
- st_filesystem_i->f_blocks = buf.f_blocks * buf.f_frsize;
- st_filesystem_i->f_bfree = buf.f_bfree * buf.f_frsize;
- st_filesystem_i->f_bavail = buf.f_bavail * buf.f_frsize;
- st_filesystem_i->f_files = buf.f_files;
- st_filesystem_i->f_ffree = buf.f_ffree;
+ st_filesystem_i->f_blocks = (unsigned long long) buf.f_blocks * (unsigned long long) buf.f_frsize;
+ st_filesystem_i->f_bfree = (unsigned long long) buf.f_bfree * (unsigned long long) buf.f_frsize;
+ st_filesystem_i->f_bavail = (unsigned long long) buf.f_bavail * (unsigned long long) buf.f_frsize;
+ st_filesystem_i->f_files = (unsigned long long) buf.f_files;
+ st_filesystem_i->f_ffree = (unsigned long long) buf.f_ffree;
strncpy(st_filesystem_i->fs_name, fs_name, MAX_FS_LEN);
st_filesystem_i->fs_name[MAX_FS_LEN - 1] = '\0';
strncpy(st_filesystem_i->mountp, mountp, MAX_FS_LEN);
--
2.14.3