fortify/internal/sandbox/path.go
Ophestra 60bce2f94b
Some checks failed
Test / Create distribution (push) Successful in 25s
Test / Fortify (push) Failing after 2m28s
Test / Fpkg (push) Successful in 3m24s
Test / Data race detector (push) Failing after 3m35s
Test / Flake checks (push) Has been skipped
sandbox: implement native container tool
Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-03-13 00:59:04 +09:00

50 lines
1.0 KiB
Go

package sandbox
import (
"errors"
"io/fs"
"os"
"path"
"strings"
"syscall"
)
func toSysroot(name string) string {
name = strings.TrimLeftFunc(name, func(r rune) bool { return r == '/' })
return path.Join("/sysroot", name)
}
func toHost(name string) string {
name = strings.TrimLeftFunc(name, func(r rune) bool { return r == '/' })
return path.Join("/host", name)
}
func createFile(name string, perm os.FileMode, content []byte) error {
if err := os.MkdirAll(path.Dir(name), 0755); err != nil {
return err
}
f, err := os.OpenFile(name, syscall.O_CREAT|syscall.O_EXCL|syscall.O_WRONLY, perm)
if err != nil {
return err
}
if content != nil {
_, err = f.Write(content)
}
return errors.Join(f.Close(), err)
}
func ensureFile(name string, perm os.FileMode) error {
fi, err := os.Stat(name)
if err != nil {
if !os.IsNotExist(err) {
return err
}
return createFile(name, perm, nil)
}
if mode := fi.Mode(); mode&fs.ModeDir != 0 || mode&fs.ModeSymlink != 0 {
err = syscall.EISDIR
}
return err
}