diff options
| author | jet2tlf <jet2tlf@gmail.com> | 2024-06-03 06:29:54 +0000 |
|---|---|---|
| committer | jet2tlf <jet2tlf@gmail.com> | 2024-06-03 06:29:54 +0000 |
| commit | ba2c10b433a5f9a993cfdcb3dee79a74361e35da (patch) | |
| tree | 130c5bcc1a056c7b409e7b547b019ba5c38fdc0e /app | |
| parent | 3ecb843573dd750dd2df24156998a634ecbdb965 (diff) | |
| download | docker-go-ba2c10b433a5f9a993cfdcb3dee79a74361e35da.tar.gz docker-go-ba2c10b433a5f9a993cfdcb3dee79a74361e35da.zip | |
codecrafters submit [skip ci]
Diffstat (limited to 'app')
| -rw-r--r-- | app/main.go | 31 |
1 files changed, 29 insertions, 2 deletions
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) + } + } } |