diff --git a/_cmptest/osexec/exec.go b/_cmptest/osexec/exec.go index ec983c4b..31eb2ec1 100644 --- a/_cmptest/osexec/exec.go +++ b/_cmptest/osexec/exec.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "os" "os/exec" "runtime" @@ -15,4 +16,7 @@ func main() { cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.Run() + + output, _ := exec.Command(ls).Output() + fmt.Print(string(output)) } diff --git a/internal/lib/fmt/print.go b/internal/lib/fmt/print.go index 88786f0a..450d5a0d 100644 --- a/internal/lib/fmt/print.go +++ b/internal/lib/fmt/print.go @@ -1218,19 +1218,16 @@ formatLoop: } func (p *pp) doPrint(a []any) { - /* - prevString := false - for argNum, arg := range a { - isString := arg != nil && reflect.TypeOf(arg).Kind() == reflect.String - // Add a space between two non-string arguments. - if argNum > 0 && !isString && !prevString { - p.buf.writeByte(' ') - } - p.printArg(arg, 'v') - prevString = isString + prevString := false + for argNum, arg := range a { + isString := arg != nil && reflect.TypeOf(arg).Kind() == reflect.String + // Add a space between two non-string arguments. + if argNum > 0 && !isString && !prevString { + p.buf.writeByte(' ') } - */ - panic("todo: fmt.(*pp).doPrint") + p.printArg(arg, 'v') + prevString = isString + } } // doPrintln is like doPrint but always adds a space between arguments diff --git a/internal/lib/syscall/exec_libc2.go b/internal/lib/syscall/exec_libc2.go index 02237240..12bcfcbc 100644 --- a/internal/lib/syscall/exec_libc2.go +++ b/internal/lib/syscall/exec_libc2.go @@ -7,6 +7,8 @@ package syscall import ( + "unsafe" + "github.com/goplus/llgo/c" "github.com/goplus/llgo/c/os" "github.com/goplus/llgo/c/syscall" @@ -322,12 +324,9 @@ func forkAndExecInChild(argv0 *c.Char, argv, envv **c.Char, chroot, dir *c.Char, */ childerror: - /* TODO(xsw): // send error code on pipe - rawSyscall(abi.FuncPCABI0(libc_write_trampoline), uintptr(pipe), uintptr(unsafe.Pointer(&err1)), unsafe.Sizeof(err1)) + os.Write(c.Int(pipe), unsafe.Pointer(&err1), unsafe.Sizeof(err1)) for { - rawSyscall(abi.FuncPCABI0(libc_exit_trampoline), 253, 0, 0) + os.Exit(253) } - */ - panic("todo: syscall.forkAndExecInChild - childerror") }