From ba2c10b433a5f9a993cfdcb3dee79a74361e35da Mon Sep 17 00:00:00 2001 From: jet2tlf Date: Mon, 3 Jun 2024 03:29:54 -0300 Subject: codecrafters submit [skip ci] --- app/main.go | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) (limited to 'app/main.go') diff --git a/app/main.go b/app/main.go index 7cc6b84..992c3c3 100644 --- a/app/main.go +++ b/app/main.go @@ -4,19 +4,46 @@ import ( "fmt" "os" "os/exec" + "path/filepath" + "syscall" ) func main() { command := os.Args[3] args := os.Args[4:len(os.Args)] + tmpDir := "/tmp/mydocker" cmd := exec.Command(command, args...) + + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr - output, err := cmd.Output() + + _ = os.Mkdir(tmpDir, 0755) + + err := exec.Command("mkdir", "-p", filepath.Join(tmpDir, filepath.Dir(command))).Run() + if err != nil { + fmt.Printf("Err: %v", err) + os.Exit(1) + } + + err = exec.Command("cp", command, filepath.Join(tmpDir, command)).Run() if err != nil { fmt.Printf("Err: %v", err) os.Exit(1) } - fmt.Print(string(output)) + cmd.SysProcAttr = &syscall.SysProcAttr{ + Chroot: tmpDir, + } + + err = cmd.Run() + if err != nil { + if exitError, ok := err.(*exec.ExitError); ok { + os.Exit(exitError.ExitCode()) + } else { + fmt.Printf("Err: %v", err) + os.Exit(1) + } + } } -- cgit v1.2.3