Skip to content

Commit

Permalink
Merge pull request #587 from xushiwei/q
Browse files Browse the repository at this point in the history
osexec demo
  • Loading branch information
xushiwei authored Jul 28, 2024
2 parents 4a350d8 + 3a8642b commit 651edf5
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 18 deletions.
File renamed without changes.
5 changes: 2 additions & 3 deletions internal/lib/os/exec/exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ import (
"strings"
"syscall"
"time"

"github.com/goplus/llgo/internal/lib/internal/syscall/execenv"
)

// Error is returned by LookPath when it fails to classify a file as an
Expand Down Expand Up @@ -1089,7 +1091,6 @@ func minInt(a, b int) int {
// would be run as it is currently configured. If an error occurs in computing
// the environment, it is returned alongside the best-effort copy.
func (c *Cmd) environ() ([]string, error) {
/* TODO(xsw):
var err error

env := c.Env
Expand Down Expand Up @@ -1128,8 +1129,6 @@ func (c *Cmd) environ() ([]string, error) {
err = dedupErr
}
return addCriticalEnv(env), err
*/
panic("todo: exec.Cmd.environ")
}

// Environ returns a copy of the environment in which the command would be run
Expand Down
11 changes: 4 additions & 7 deletions internal/lib/os/file_posix.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,10 @@ import (
// be canceled and return immediately with an ErrClosed error.
// Close will return an error if it has already been called.
func (f *File) Close() error {
/*
if f == nil {
return ErrInvalid
}
return f.file.close()
*/
panic("todo: os.(*File).Close")
if f == nil {
return ErrInvalid
}
return f.close()
}

// pread reads len(b) bytes from the File starting at byte offset off.
Expand Down
21 changes: 21 additions & 0 deletions internal/lib/os/file_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,27 @@ func openFileNolog(name string, flag int, perm FileMode) (*File, error) {
return f, nil
}

func (file *File) close() error {
return syscall.Close(int(file.fd))
/* TODO(xsw):
if file.dirinfo != nil {
file.dirinfo.close()
file.dirinfo = nil
}
var err error
if e := file.pfd.Close(); e != nil {
if e == poll.ErrFileClosing {
e = ErrClosed
}
err = &PathError{Op: "close", Path: file.name, Err: e}
}
// no need for a finalizer anymore
runtime.SetFinalizer(file, nil)
return err
*/
}

func tempDir() string {
dir := Getenv("TMPDIR")
if dir == "" {
Expand Down
11 changes: 3 additions & 8 deletions internal/lib/syscall/exec_libc2.go
Original file line number Diff line number Diff line change
Expand Up @@ -261,22 +261,17 @@ func forkAndExecInChild(argv0 *c.Char, argv, envv **c.Char, chroot, dir *c.Char,
if fd[i] == i {
// dup2(i, i) won't clear close-on-exec flag on Linux,
// probably not elsewhere either.
ret := os.Fcntl(c.Int(fd[i]), syscall.F_SETFD, 0)
if ret != 0 {
if ret := os.Fcntl(c.Int(fd[i]), syscall.F_SETFD, 0); ret != 0 {
err1 = Errno(ret)
goto childerror
}
continue
}
/* TODO(xsw):
// The new fd is created NOT close-on-exec,
// which is exactly what we want.
_, _, err1 = rawSyscall(abi.FuncPCABI0(libc_dup2_trampoline), uintptr(fd[i]), uintptr(i), 0)
if err1 != 0 {
if ret := os.Dup2(c.Int(fd[i]), c.Int(i)); ret != 0 {
err1 = Errno(ret)
goto childerror
}
*/
panic("todo: syscall.forkAndExecInChild - dup2")
}

// By convention, we don't close-on-exec the fds we are
Expand Down

0 comments on commit 651edf5

Please sign in to comment.