]> git.sur5r.net Git - bacula/bacula/commitdiff
Correct FS size calculation for FreeBSD, Solaris, and Windows
authorKern Sibbald <kern@sibbald.com>
Sun, 12 Nov 2017 09:15:59 +0000 (10:15 +0100)
committerKern Sibbald <kern@sibbald.com>
Sun, 12 Nov 2017 09:15:59 +0000 (10:15 +0100)
bacula/src/lib/bsys.c

index 21a8f69db4693189a923cbbfe511c9f314fcde8c..916357493b21ca7517c9c8caf7b116a4621af3a5 100644 (file)
@@ -1029,15 +1029,23 @@ void stack_trace() {}
 
 int fs_get_free_space(const char *path, int64_t *freeval, int64_t *totalval)
 {
-#if !defined(HAVE_WIN32) && !defined(HAVE_SUN_OS)
+
+/* For Windows must have statvfs */
+#if defined(HAVE_WIN32)
+   #if !defined(HAVE_SYS_STATVFS_H)
+      *totalval = *freeval = 0;
+      return -1;
+   #endif
+#endif
+
    struct statvfs st;
 
    if (statvfs(path, &st) == 0) {
-      *freeval = (uint64_t)st.f_bsize * (uint64_t)st.f_bavail;
+      *freeval  = (uint64_t)st.f_bavail * (uint64_t)st.f_frsize;
       *totalval = (uint64_t)st.f_blocks * (uint64_t)st.f_frsize;
       return 0;
    }
-#endif
+
    *totalval = *freeval = 0;
    return -1;
 }