From 8c6d9e4ab67ae963160a27297b12e1822b763b56 Mon Sep 17 00:00:00 2001 From: ptrcnull Date: Thu, 5 Jan 2023 02:29:23 +0100 Subject: [PATCH] feat: Add proper device handling --- README.md | 1 - device.go | 7 +++---- process.go | 15 +++++++++++---- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 5bf5f75..75189d7 100644 --- a/README.md +++ b/README.md @@ -7,4 +7,3 @@ Drop-in replacement for busybox init (kind of) ### TODO - askfirst handling -- other devices than /dev/console diff --git a/device.go b/device.go index a8a6b00..c87b6de 100644 --- a/device.go +++ b/device.go @@ -2,18 +2,17 @@ package main import ( "fmt" - "io" "os" ) -var devices map[string]io.ReadWriteCloser +var devices = map[string]*os.File{} -func GetDevice(name string) (io.ReadWriteCloser, error) { +func GetDevice(name string) (*os.File, error) { if dev, ok := devices[name]; ok { return dev, nil } - dev, err := os.OpenFile("/dev/" + name, os.O_RDWR, 0644) + dev, err := os.OpenFile("/dev/"+name, os.O_RDWR, 0644) if err != nil { return nil, fmt.Errorf("open: %w", err) } diff --git a/process.go b/process.go index d20cf2c..c9547a9 100644 --- a/process.go +++ b/process.go @@ -11,10 +11,17 @@ func Spawn(entry InitTabEntry) (*exec.Cmd, error) { cmdline := strings.Split(entry.Process, " ") cmd := exec.Command(cmdline[0], cmdline[1:]...) - // TODO: add stdio handling - cmd.Stdin = os.Stdin - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr + stdio := os.Stdout + if entry.Device != "" { + dev, err := GetDevice(entry.Device) + if err != nil { + return nil, fmt.Errorf("open device %s: %w", entry.Device, err) + } + stdio = dev + } + cmd.Stdin = stdio + cmd.Stdout = stdio + cmd.Stderr = stdio err := cmd.Start() if err != nil {