github.com/josephvusich/fdf@v0.0.0-20230522095411-9326dd32e33f/copyfile_windows.go (about)

     1  package main
     2  
     3  import (
     4  	"syscall"
     5  	"unsafe"
     6  
     7  	"golang.org/x/sys/windows"
     8  )
     9  
    10  var (
    11  	libKernel32   = windows.NewLazySystemDLL("kernel32.dll")
    12  	procCopyFileW = libKernel32.NewProc("CopyFileW")
    13  )
    14  
    15  func copyFile(src, dst string) error {
    16  	wsrc, err := syscall.UTF16PtrFromString(fixLongPath(src))
    17  	if err != nil {
    18  		return err
    19  	}
    20  	wdst, err := syscall.UTF16PtrFromString(fixLongPath(dst))
    21  	if err != nil {
    22  		return err
    23  	}
    24  
    25  	result, _, err := syscall.SyscallN(procCopyFileW.Addr(), uintptr(unsafe.Pointer(wsrc)), uintptr(unsafe.Pointer(wdst)), uintptr(1))
    26  	if result == 0 {
    27  		return err
    28  	}
    29  	return nil
    30  }