//go:build windows package logstorage import ( "fmt" "syscall" "unsafe" ) var getLogDiskFreeSpaceEx = syscall.NewLazyDLL("kernel32.dll").NewProc("GetDiskFreeSpaceExW") func filesystemTotalBytes(path string) (int64, error) { pathUTF16, err := syscall.UTF16PtrFromString(path) if err != nil { return 0, err } var total uint64 result, _, callErr := getLogDiskFreeSpaceEx.Call(uintptr(unsafe.Pointer(pathUTF16)), 0, uintptr(unsafe.Pointer(&total)), 0) if result == 0 { return 0, fmt.Errorf("GetDiskFreeSpaceExW: %w", callErr) } return int64(total), nil } func filesystemFreeBytes(path string) (int64, error) { pathUTF16, err := syscall.UTF16PtrFromString(path) if err != nil { return 0, err } var available uint64 result, _, callErr := getLogDiskFreeSpaceEx.Call(uintptr(unsafe.Pointer(pathUTF16)), uintptr(unsafe.Pointer(&available)), 0, 0) if result == 0 { return 0, fmt.Errorf("GetDiskFreeSpaceExW: %w", callErr) } if available > uint64(^uint64(0)>>1) { return int64(^uint64(0) >> 1), nil } return int64(available), nil }