36 lines
843 B
Go
36 lines
843 B
Go
//go:build windows
|
|
|
|
package installer
|
|
|
|
import (
|
|
"fmt"
|
|
"syscall"
|
|
)
|
|
|
|
func syncDirectoryPath(path string) error {
|
|
pathPointer, err := syscall.UTF16PtrFromString(path)
|
|
if err != nil {
|
|
return fmt.Errorf("encode directory path: %w", err)
|
|
}
|
|
handle, err := syscall.CreateFile(
|
|
pathPointer,
|
|
syscall.GENERIC_READ|syscall.GENERIC_WRITE,
|
|
syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE,
|
|
nil,
|
|
syscall.OPEN_EXISTING,
|
|
syscall.FILE_FLAG_BACKUP_SEMANTICS,
|
|
0,
|
|
)
|
|
if err != nil {
|
|
return fmt.Errorf("open directory handle: %w", err)
|
|
}
|
|
if err := syscall.FlushFileBuffers(handle); err != nil {
|
|
_ = syscall.CloseHandle(handle)
|
|
return fmt.Errorf("flush directory handle: %w", err)
|
|
}
|
|
if err := syscall.CloseHandle(handle); err != nil {
|
|
return fmt.Errorf("close directory handle: %w", err)
|
|
}
|
|
return nil
|
|
}
|