forked from TrueCloudLab/restic
35 lines
719 B
Go
35 lines
719 B
Go
//go:build windows
|
|
// +build windows
|
|
|
|
package restorer
|
|
|
|
import (
|
|
"math"
|
|
"syscall"
|
|
"testing"
|
|
"unsafe"
|
|
|
|
rtest "github.com/restic/restic/internal/test"
|
|
"golang.org/x/sys/windows"
|
|
)
|
|
|
|
func getBlockCount(t *testing.T, filename string) int64 {
|
|
libkernel32 := windows.NewLazySystemDLL("kernel32.dll")
|
|
err := libkernel32.Load()
|
|
rtest.OK(t, err)
|
|
proc := libkernel32.NewProc("GetCompressedFileSizeW")
|
|
err = proc.Find()
|
|
rtest.OK(t, err)
|
|
|
|
namePtr, err := syscall.UTF16PtrFromString(filename)
|
|
rtest.OK(t, err)
|
|
|
|
result, _, _ := proc.Call(uintptr(unsafe.Pointer(namePtr)), 0)
|
|
|
|
const invalidFileSize = uintptr(4294967295)
|
|
if result == invalidFileSize {
|
|
return -1
|
|
}
|
|
|
|
return int64(math.Ceil(float64(result) / 512))
|
|
}
|