blob: f8ab19f0ade688e61589a15e080ea81465748603 [file] [log] [blame]
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build fuchsia
package os
import (
"errors"
"runtime"
"sync/atomic"
"syscall/zx"
"time"
)
type ProcessState struct {
retCode int
}
func (p *ProcessState) exited() bool {
panic("TODO os.Exited")
}
func (p *ProcessState) Pid() int {
panic("TODO os.Pid")
}
func (p *ProcessState) String() string {
if p == nil {
return "<nil>"
}
return "exit status " + itoa(p.retCode)
}
func (p *ProcessState) ExitCode() int {
// return -1 if the process hasn't started.
if p == nil {
return -1
}
return p.retCode
}
func (p *ProcessState) success() bool {
return p.retCode == 0
}
func (p *ProcessState) sys() interface{} {
panic("TODO os.sys")
}
func (p *ProcessState) sysUsage() interface{} {
panic("TODO os.sysUsage")
}
func (p *ProcessState) systemTime() time.Duration {
panic("TODO os.systemTime")
}
func (p *ProcessState) userTime() time.Duration {
panic("TODO os.userTime")
}
func (p *Process) release() error {
h := atomic.SwapUintptr(&p.handle, uintptr(zx.HandleInvalid))
procHandle := zx.Handle(h)
if err := procHandle.Close(); err != nil {
return err
}
// no need for a finalizer anymore
runtime.SetFinalizer(p, nil)
return nil
}
func (p *Process) signal(sig Signal) error {
panic("TODO os.Process.signal")
}
func findProcess(pid int) (p *Process, err error) {
panic("TODO os.findProcess")
}
func startProcess(name string, argv []string, attr *ProcAttr) (p *Process, err error) {
h, err := fdioStartProcess(name, argv, attr)
if err != nil {
return nil, err
}
pid := 1 // TODO: what does this even mean for us?
return newProcess(pid, uintptr(h)), nil
}
func hostname() (name string, err error) {
return "", errors.New("os.hostname unimplemented")
}
type signal string
func (s signal) String() string { return string(s) }
func (s signal) Signal() {}
var Interrupt = signal("signal_interrupt")