git-lfs/lfs/util_linux.go
2016-01-26 12:45:39 +03:00

36 lines
635 B
Go

// +build linux,cgo
package lfs
/*
#include <sys/ioctl.h>
#undef BTRFS_IOCTL_MAGIC
#define BTRFS_IOCTL_MAGIC 0x94
#undef BTRFS_IOC_CLONE
#define BTRFS_IOC_CLONE _IOW (BTRFS_IOCTL_MAGIC, 9, int)
*/
import "C"
import (
"os"
"io"
"syscall"
)
const (
BtrfsIocClone = C.BTRFS_IOC_CLONE
)
func CloneFile(writer io.Writer, reader io.Reader) (bool, error) {
fdst, fdstFound := writer.(*os.File)
fsrc, fsrcFound := reader.(*os.File)
if fdstFound && fsrcFound {
if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fdst.Fd(), BtrfsIocClone, fsrc.Fd()); err != 0 {
return false, err
}
return true, nil
}
return false, nil
}