From 64540187d880ba52579c65d20c1d29a9a44139a6 Mon Sep 17 00:00:00 2001
From: t_max <1172915550@qq.com>
Date: Mon, 2 Sep 2024 17:35:30 +0800
Subject: [PATCH 1/4] fix: get disk size for macOS and other arch

---
 space.go         |  4 ++--
 space_bsd.go     | 19 +++++++++++++++++++
 space_netbsd.go  | 17 +++++++++++++++++
 space_openbsd.go | 17 +++++++++++++++++
 4 files changed, 55 insertions(+), 2 deletions(-)
 create mode 100644 space_bsd.go
 create mode 100644 space_netbsd.go
 create mode 100644 space_openbsd.go

diff --git a/space.go b/space.go
index f7b0d17..7ab3e73 100644
--- a/space.go
+++ b/space.go
@@ -1,5 +1,5 @@
-//go:build !windows
-// +build !windows
+//go:build linux && !s390x && !netbsd
+// +build linux,!s390x,!netbsd
 
 package rotatelogs
 
diff --git a/space_bsd.go b/space_bsd.go
new file mode 100644
index 0000000..3ef8bd9
--- /dev/null
+++ b/space_bsd.go
@@ -0,0 +1,19 @@
+//go:build darwin || dragonfly || s390x
+// +build darwin dragonfly s390x
+
+package rotatelogs
+
+import (
+	"golang.org/x/sys/unix"
+)
+
+func GetDiskSize(dir string) (total uint64, avail uint64, err error) {
+	fs := unix.Statfs_t{}
+	err = unix.Statfs(dir, &fs)
+	if err != nil {
+		return 0, 0, err
+	}
+	avail = fs.Bavail * uint64(fs.Bsize)
+	total = fs.Blocks * uint64(fs.Bsize)
+	return total, avail, nil
+}
diff --git a/space_netbsd.go b/space_netbsd.go
new file mode 100644
index 0000000..a4f5f03
--- /dev/null
+++ b/space_netbsd.go
@@ -0,0 +1,17 @@
+//go:build netbsd
+// +build netbsd
+
+package rotatelogs
+
+import "golang.org/x/sys/unix"
+
+func GetDiskSize(dir string) (total uint64, avail uint64, err error) {
+	fs := unix.Statvfs_t{}
+	err = unix.Statvfs(dir, &fs)
+	if err != nil {
+		return 0, 0, err
+	}
+	avail = fs.Bavail * fs.Frsize
+	total = fs.Blocks * fs.Frsize
+	return total, avail, nil
+}
diff --git a/space_openbsd.go b/space_openbsd.go
new file mode 100644
index 0000000..085216e
--- /dev/null
+++ b/space_openbsd.go
@@ -0,0 +1,17 @@
+//go:build openbsd
+// +build openbsd
+
+package rotatelogs
+
+import "golang.org/x/sys/unix"
+
+func GetDiskSize(dir string) (total uint64, avail uint64, err error) {
+	fs := unix.Statfs_t{}
+	err = unix.Statfs(dir, &fs)
+	if err != nil {
+		return 0, 0, err
+	}
+	avail = fs.F_blocks * uint64(fs.F_bsize)
+	total = uint64(fs.F_bavail) * uint64(fs.F_bsize)
+	return total, avail, nil
+}

From 7939d381a3ad1b054044179ae2dc323db3303220 Mon Sep 17 00:00:00 2001
From: t_max <1172915550@qq.com>
Date: Mon, 2 Sep 2024 17:44:35 +0800
Subject: [PATCH 2/4] fix: get disk size on openbsd

---
 space_openbsd.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/space_openbsd.go b/space_openbsd.go
index 085216e..7fec577 100644
--- a/space_openbsd.go
+++ b/space_openbsd.go
@@ -11,7 +11,7 @@ func GetDiskSize(dir string) (total uint64, avail uint64, err error) {
 	if err != nil {
 		return 0, 0, err
 	}
-	avail = fs.F_blocks * uint64(fs.F_bsize)
-	total = uint64(fs.F_bavail) * uint64(fs.F_bsize)
+	avail = uint64(fs.F_bavail) * uint64(fs.F_bsize)
+	total = fs.F_blocks * uint64(fs.F_bsize)
 	return total, avail, nil
 }

From 340552306d225c820eb20b80bef5ed3ff46210b1 Mon Sep 17 00:00:00 2001
From: t_max <1172915550@qq.com>
Date: Mon, 2 Sep 2024 17:46:31 +0800
Subject: [PATCH 3/4] fix: get disk size on dragonfly

---
 space_bsd.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/space_bsd.go b/space_bsd.go
index 3ef8bd9..aeb3175 100644
--- a/space_bsd.go
+++ b/space_bsd.go
@@ -13,7 +13,7 @@ func GetDiskSize(dir string) (total uint64, avail uint64, err error) {
 	if err != nil {
 		return 0, 0, err
 	}
-	avail = fs.Bavail * uint64(fs.Bsize)
-	total = fs.Blocks * uint64(fs.Bsize)
+	avail = uint64(fs.Bavail) * uint64(fs.Bsize)
+	total = uint64(fs.Blocks) * uint64(fs.Bsize)
 	return total, avail, nil
 }

From 3e13ddfe45ee6ef12ea5e36e9e8599eb9b55915f Mon Sep 17 00:00:00 2001
From: t_max <1172915550@qq.com>
Date: Mon, 2 Sep 2024 17:48:06 +0800
Subject: [PATCH 4/4] fix: get disk size on linux

---
 space.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/space.go b/space.go
index 7ab3e73..4ae0928 100644
--- a/space.go
+++ b/space.go
@@ -13,7 +13,7 @@ func GetDiskSize(dir string) (total uint64, avail uint64, err error) {
 	if err != nil {
 		return 0, 0, err
 	}
-	avail = fs.Bavail * uint64(fs.Frsize)
-	total = fs.Blocks * uint64(fs.Frsize)
+	avail = uint64(fs.Bavail) * uint64(fs.Frsize)
+	total = uint64(fs.Blocks) * uint64(fs.Frsize)
 	return total, avail, nil
 }