From 82b9ea8a0985feecde31de2bbe49d3ac412c4408 Mon Sep 17 00:00:00 2001
From: Kazufumi NOTO <noto.kazufumi@gmail.com>
Date: Tue, 19 Mar 2019 02:16:42 +0900
Subject: [PATCH] fs: Fix incorrect size report on 32bit machines (#1699)

Cast before multiplication to avoid overflow.

Fixes #743
---
 src/modules/fs.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/modules/fs.cpp b/src/modules/fs.cpp
index cb5df8bf..62d545f4 100644
--- a/src/modules/fs.cpp
+++ b/src/modules/fs.cpp
@@ -97,10 +97,10 @@ namespace modules {
         mount->fsname = details->at(MOUNTINFO_FSNAME);
 
         // see: http://en.cppreference.com/w/cpp/filesystem/space
-        mount->bytes_total = buffer.f_frsize * buffer.f_blocks;
-        mount->bytes_free = buffer.f_frsize * buffer.f_bfree;
+        mount->bytes_total = static_cast<uint64_t>(buffer.f_frsize) * static_cast<uint64_t>(buffer.f_blocks);
+        mount->bytes_free = static_cast<uint64_t>(buffer.f_frsize) * static_cast<uint64_t>(buffer.f_bfree);
         mount->bytes_used = mount->bytes_total - mount->bytes_free;
-        mount->bytes_avail = buffer.f_frsize * buffer.f_bavail;
+        mount->bytes_avail = static_cast<uint64_t>(buffer.f_frsize) * static_cast<uint64_t>(buffer.f_bavail);
 
         mount->percentage_free = math_util::percentage<double>(mount->bytes_avail, mount->bytes_used + mount->bytes_avail);
         mount->percentage_used = math_util::percentage<double>(mount->bytes_used, mount->bytes_used + mount->bytes_avail);