From ce6a566f837d41e8aa48db0a7c56a8a250000ba9 Mon Sep 17 00:00:00 2001 From: grendervill Date: Sun, 20 Sep 2026 21:28:08 +0300 Subject: [PATCH] =?UTF-8?q?fix(sysinfo):=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D0=B8=D0=BC=D0=BE=D0=B5=20=D0=BF=D1=80=D0=B8=D0=B2?= =?UTF-8?q?=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B0=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=B0=20statfs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `statfs.Bsize` в Linux — int64, в Darwin — uint32: сборка образа для linux/amd64 падала на приведении к uint32. Приведение к int64 безопасно на обеих платформах; проверено `GOOS=linux go vet` по всем пакетам. --- internal/sysinfo/sysinfo.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/internal/sysinfo/sysinfo.go b/internal/sysinfo/sysinfo.go index c4e2e4c..70daac0 100644 --- a/internal/sysinfo/sysinfo.go +++ b/internal/sysinfo/sysinfo.go @@ -295,7 +295,8 @@ func ReadDisk(path string) (Disk, error) { if err := syscall.Statfs(path, &stats); err != nil { return Disk{}, fmt.Errorf("sysinfo.disk: %w", err) } - blockSize := toInt64From32(stats.Bsize) + // Bsize в Linux — int64, в Darwin — uint32: приведение безопасно в обоих случаях. + blockSize := int64(stats.Bsize) total := saturatingMul(toInt64(stats.Blocks), blockSize) free := saturatingMul(toInt64(stats.Bavail), blockSize) return Disk{UsedBytes: total - free, TotalBytes: total, FreeBytes: free}, nil @@ -324,11 +325,6 @@ func toInt64(value uint64) int64 { return int64(value) } -// toInt64From32 переводит 32-битное беззнаковое значение (размер блока statfs). -func toInt64From32(value uint32) int64 { - return int64(value) -} - // saturatingMul умножает с насыщением: размер раздела не должен переполняться. func saturatingMul(a, b int64) int64 { if a <= 0 || b <= 0 {