fix(sysinfo): переносимое приведение размера блока statfs

`statfs.Bsize` в Linux — int64, в Darwin — uint32: сборка образа для linux/amd64
падала на приведении к uint32. Приведение к int64 безопасно на обеих
платформах; проверено `GOOS=linux go vet` по всем пакетам.
This commit is contained in:
2026-09-20 21:28:08 +03:00
parent e1107600ec
commit ce6a566f83
+2 -6
View File
@@ -295,7 +295,8 @@ func ReadDisk(path string) (Disk, error) {
if err := syscall.Statfs(path, &stats); err != nil { if err := syscall.Statfs(path, &stats); err != nil {
return Disk{}, fmt.Errorf("sysinfo.disk: %w", err) 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) total := saturatingMul(toInt64(stats.Blocks), blockSize)
free := saturatingMul(toInt64(stats.Bavail), blockSize) free := saturatingMul(toInt64(stats.Bavail), blockSize)
return Disk{UsedBytes: total - free, TotalBytes: total, FreeBytes: free}, nil return Disk{UsedBytes: total - free, TotalBytes: total, FreeBytes: free}, nil
@@ -324,11 +325,6 @@ func toInt64(value uint64) int64 {
return int64(value) return int64(value)
} }
// toInt64From32 переводит 32-битное беззнаковое значение (размер блока statfs).
func toInt64From32(value uint32) int64 {
return int64(value)
}
// saturatingMul умножает с насыщением: размер раздела не должен переполняться. // saturatingMul умножает с насыщением: размер раздела не должен переполняться.
func saturatingMul(a, b int64) int64 { func saturatingMul(a, b int64) int64 {
if a <= 0 || b <= 0 { if a <= 0 || b <= 0 {