Pārlūkot izejas kodu

Fix compilation errors with btrfs-progs-4.5

btrfs-progs-4.5 introduces device delete by devid
for this reason btrfs_ioctl_vol_args_v2's name was encapsulated
in a union

this patch is for setting btrfs_ioctl_vol_args_v2's name
using a C function in order to preserve compatibility
with all btrfs-progs versions

Signed-off-by: Julio Montes <imc.coder@gmail.com>
Julio Montes 9 gadi atpakaļ
vecāks
revīzija
a038cccf88
1 mainītis faili ar 8 papildinājumiem un 3 dzēšanām
  1. 8 3
      daemon/graphdriver/btrfs/btrfs.go

+ 8 - 3
daemon/graphdriver/btrfs/btrfs.go

@@ -7,6 +7,10 @@ package btrfs
 #include <dirent.h>
 #include <dirent.h>
 #include <btrfs/ioctl.h>
 #include <btrfs/ioctl.h>
 #include <btrfs/ctree.h>
 #include <btrfs/ctree.h>
+
+static void set_name_btrfs_ioctl_vol_args_v2(struct btrfs_ioctl_vol_args_v2* btrfs_struct, const char* value) {
+    snprintf(btrfs_struct->name, BTRFS_SUBVOL_NAME_MAX, "%s", value);
+}
 */
 */
 import "C"
 import "C"
 
 
@@ -159,9 +163,10 @@ func subvolSnapshot(src, dest, name string) error {
 
 
 	var args C.struct_btrfs_ioctl_vol_args_v2
 	var args C.struct_btrfs_ioctl_vol_args_v2
 	args.fd = C.__s64(getDirFd(srcDir))
 	args.fd = C.__s64(getDirFd(srcDir))
-	for i, c := range []byte(name) {
-		args.name[i] = C.char(c)
-	}
+
+	var cs = C.CString(name)
+	C.set_name_btrfs_ioctl_vol_args_v2(&args, cs)
+	C.free(unsafe.Pointer(cs))
 
 
 	_, _, errno := syscall.Syscall(syscall.SYS_IOCTL, getDirFd(destDir), C.BTRFS_IOC_SNAP_CREATE_V2,
 	_, _, errno := syscall.Syscall(syscall.SYS_IOCTL, getDirFd(destDir), C.BTRFS_IOC_SNAP_CREATE_V2,
 		uintptr(unsafe.Pointer(&args)))
 		uintptr(unsafe.Pointer(&args)))