Search/disk_win.go
partisan 8dbfaae1b6
Some checks failed
Run Integration Tests / test (push) Failing after 10m8s
Fixed windows compatibility
2025-05-31 21:44:31 +02:00

36 lines
815 B
Go

//go:build windows
// +build windows
package main
import (
"syscall"
"unsafe"
)
func getTotalDiskSpace(path string) uint64 {
kernel32 := syscall.NewLazyDLL("kernel32.dll")
getDiskFreeSpaceExW := kernel32.NewProc("GetDiskFreeSpaceExW")
lpDirectoryName, err := syscall.UTF16PtrFromString(path)
if err != nil {
printErr("Failed to encode path for Windows API: %v", err)
return 0
}
var freeBytesAvailable, totalNumberOfBytes, totalNumberOfFreeBytes uint64
r1, _, err := getDiskFreeSpaceExW.Call(
uintptr(unsafe.Pointer(lpDirectoryName)),
uintptr(unsafe.Pointer(&freeBytesAvailable)),
uintptr(unsafe.Pointer(&totalNumberOfBytes)),
uintptr(unsafe.Pointer(&totalNumberOfFreeBytes)),
)
if r1 == 0 {
printErr("GetDiskFreeSpaceExW failed: %v", err)
return 0
}
return totalNumberOfBytes
}