//go:build linux

package platform

import (
	"os"
	"syscall"
)

const ioctlLoopChangeFD = 0x4C08

func loopChangeFD(loopDev, newFile string) error {
	lf, err := os.OpenFile(loopDev, os.O_RDWR, 0)
	if err != nil {
		return err
	}
	defer lf.Close()
	nf, err := os.OpenFile(newFile, os.O_RDONLY, 0)
	if err != nil {
		return err
	}
	defer nf.Close()
	_, _, errno := syscall.Syscall(syscall.SYS_IOCTL, lf.Fd(), ioctlLoopChangeFD, nf.Fd())
	if errno != 0 {
		return errno
	}
	return nil
}

// bindMount binds src over dst using the syscall directly (avoids exec PATH issues).
func bindMount(src, dst string) error {
	return syscall.Mount(src, dst, "", syscall.MS_BIND, "")
}
