mirror of
https://github.com/rwinkhart/sys.git
synced 2026-09-05 16:47:27 -04:00
go.sys: copy files from syscall package to go.sys/{plan9,windows,unix}
This CL copies to each package of go.sys the files from syscall it will need.
Different directories have different files, but these:
mkall.sh
str.go
syscall.go
mksyscall.pl
race.go
race0.go
syscall_test.go
are copied to all three.
No changes yet, these are just copies. They are not ready to use yet:
package names are wrong, for starters. But this clean copy will make
it easier to follow the changes as the packages are enabled.
LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews
https://golang.org/cl/126960043
This commit is contained in:
@@ -0,0 +1,311 @@
|
||||
// Copyright 2013 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.
|
||||
|
||||
package syscall
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
//sys naclClose(fd int) (err error) = sys_close
|
||||
//sys Exit(code int) (err error)
|
||||
//sys naclFstat(fd int, stat *Stat_t) (err error) = sys_fstat
|
||||
//sys naclRead(fd int, b []byte) (n int, err error) = sys_read
|
||||
//sys naclSeek(fd int, off *int64, whence int) (err error) = sys_lseek
|
||||
|
||||
const direntSize = 8 + 8 + 2 + 256
|
||||
|
||||
// native_client/src/trusted/service_runtime/include/sys/dirent.h
|
||||
type Dirent struct {
|
||||
Ino int64
|
||||
Off int64
|
||||
Reclen uint16
|
||||
Name [256]byte
|
||||
}
|
||||
|
||||
func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
|
||||
origlen := len(buf)
|
||||
count = 0
|
||||
for max != 0 && len(buf) > 0 {
|
||||
dirent := (*Dirent)(unsafe.Pointer(&buf[0]))
|
||||
buf = buf[dirent.Reclen:]
|
||||
if dirent.Ino == 0 { // File absent in directory.
|
||||
continue
|
||||
}
|
||||
bytes := (*[512 + PathMax]byte)(unsafe.Pointer(&dirent.Name[0]))
|
||||
var name = string(bytes[0:clen(bytes[:])])
|
||||
if name == "." || name == ".." { // Useless names
|
||||
continue
|
||||
}
|
||||
max--
|
||||
count++
|
||||
names = append(names, name)
|
||||
}
|
||||
return origlen - len(buf), count, names
|
||||
}
|
||||
|
||||
func clen(n []byte) int {
|
||||
for i := 0; i < len(n); i++ {
|
||||
if n[i] == 0 {
|
||||
return i
|
||||
}
|
||||
}
|
||||
return len(n)
|
||||
}
|
||||
|
||||
const PathMax = 256
|
||||
|
||||
// An Errno is an unsigned number describing an error condition.
|
||||
// It implements the error interface. The zero Errno is by convention
|
||||
// a non-error, so code to convert from Errno to error should use:
|
||||
// err = nil
|
||||
// if errno != 0 {
|
||||
// err = errno
|
||||
// }
|
||||
type Errno uintptr
|
||||
|
||||
func (e Errno) Error() string {
|
||||
if 0 <= int(e) && int(e) < len(errorstr) {
|
||||
s := errorstr[e]
|
||||
if s != "" {
|
||||
return s
|
||||
}
|
||||
}
|
||||
return "errno " + itoa(int(e))
|
||||
}
|
||||
|
||||
func (e Errno) Temporary() bool {
|
||||
return e == EINTR || e == EMFILE || e.Timeout()
|
||||
}
|
||||
|
||||
func (e Errno) Timeout() bool {
|
||||
return e == EAGAIN || e == EWOULDBLOCK || e == ETIMEDOUT
|
||||
}
|
||||
|
||||
// A Signal is a number describing a process signal.
|
||||
// It implements the os.Signal interface.
|
||||
type Signal int
|
||||
|
||||
const (
|
||||
_ Signal = iota
|
||||
SIGCHLD
|
||||
SIGINT
|
||||
SIGKILL
|
||||
SIGTRAP
|
||||
SIGQUIT
|
||||
)
|
||||
|
||||
func (s Signal) Signal() {}
|
||||
|
||||
func (s Signal) String() string {
|
||||
if 0 <= s && int(s) < len(signals) {
|
||||
str := signals[s]
|
||||
if str != "" {
|
||||
return str
|
||||
}
|
||||
}
|
||||
return "signal " + itoa(int(s))
|
||||
}
|
||||
|
||||
var signals = [...]string{}
|
||||
|
||||
// File system
|
||||
|
||||
const (
|
||||
Stdin = 0
|
||||
Stdout = 1
|
||||
Stderr = 2
|
||||
)
|
||||
|
||||
// native_client/src/trusted/service_runtime/include/sys/fcntl.h
|
||||
const (
|
||||
O_RDONLY = 0
|
||||
O_WRONLY = 1
|
||||
O_RDWR = 2
|
||||
O_ACCMODE = 3
|
||||
|
||||
O_CREAT = 0100
|
||||
O_CREATE = O_CREAT // for ken
|
||||
O_TRUNC = 01000
|
||||
O_APPEND = 02000
|
||||
O_EXCL = 0200
|
||||
O_NONBLOCK = 04000
|
||||
O_NDELAY = O_NONBLOCK
|
||||
O_SYNC = 010000
|
||||
O_FSYNC = O_SYNC
|
||||
O_ASYNC = 020000
|
||||
|
||||
O_CLOEXEC = 0
|
||||
|
||||
FD_CLOEXEC = 1
|
||||
)
|
||||
|
||||
// native_client/src/trusted/service_runtime/include/sys/fcntl.h
|
||||
const (
|
||||
F_DUPFD = 0
|
||||
F_GETFD = 1
|
||||
F_SETFD = 2
|
||||
F_GETFL = 3
|
||||
F_SETFL = 4
|
||||
F_GETOWN = 5
|
||||
F_SETOWN = 6
|
||||
F_GETLK = 7
|
||||
F_SETLK = 8
|
||||
F_SETLKW = 9
|
||||
F_RGETLK = 10
|
||||
F_RSETLK = 11
|
||||
F_CNVT = 12
|
||||
F_RSETLKW = 13
|
||||
|
||||
F_RDLCK = 1
|
||||
F_WRLCK = 2
|
||||
F_UNLCK = 3
|
||||
F_UNLKSYS = 4
|
||||
)
|
||||
|
||||
// native_client/src/trusted/service_runtime/include/bits/stat.h
|
||||
const (
|
||||
S_IFMT = 0000370000
|
||||
S_IFSHM_SYSV = 0000300000
|
||||
S_IFSEMA = 0000270000
|
||||
S_IFCOND = 0000260000
|
||||
S_IFMUTEX = 0000250000
|
||||
S_IFSHM = 0000240000
|
||||
S_IFBOUNDSOCK = 0000230000
|
||||
S_IFSOCKADDR = 0000220000
|
||||
S_IFDSOCK = 0000210000
|
||||
|
||||
S_IFSOCK = 0000140000
|
||||
S_IFLNK = 0000120000
|
||||
S_IFREG = 0000100000
|
||||
S_IFBLK = 0000060000
|
||||
S_IFDIR = 0000040000
|
||||
S_IFCHR = 0000020000
|
||||
S_IFIFO = 0000010000
|
||||
|
||||
S_UNSUP = 0000370000
|
||||
|
||||
S_ISUID = 0004000
|
||||
S_ISGID = 0002000
|
||||
S_ISVTX = 0001000
|
||||
|
||||
S_IREAD = 0400
|
||||
S_IWRITE = 0200
|
||||
S_IEXEC = 0100
|
||||
|
||||
S_IRWXU = 0700
|
||||
S_IRUSR = 0400
|
||||
S_IWUSR = 0200
|
||||
S_IXUSR = 0100
|
||||
|
||||
S_IRWXG = 070
|
||||
S_IRGRP = 040
|
||||
S_IWGRP = 020
|
||||
S_IXGRP = 010
|
||||
|
||||
S_IRWXO = 07
|
||||
S_IROTH = 04
|
||||
S_IWOTH = 02
|
||||
S_IXOTH = 01
|
||||
)
|
||||
|
||||
// native_client/src/trusted/service_runtime/include/sys/stat.h
|
||||
// native_client/src/trusted/service_runtime/include/machine/_types.h
|
||||
type Stat_t struct {
|
||||
Dev int64
|
||||
Ino uint64
|
||||
Mode uint32
|
||||
Nlink uint32
|
||||
Uid uint32
|
||||
Gid uint32
|
||||
Rdev int64
|
||||
Size int64
|
||||
Blksize int32
|
||||
Blocks int32
|
||||
Atime int64
|
||||
AtimeNsec int64
|
||||
Mtime int64
|
||||
MtimeNsec int64
|
||||
Ctime int64
|
||||
CtimeNsec int64
|
||||
}
|
||||
|
||||
// Processes
|
||||
// Not supported on NaCl - just enough for package os.
|
||||
|
||||
var ForkLock sync.RWMutex
|
||||
|
||||
type WaitStatus uint32
|
||||
|
||||
func (w WaitStatus) Exited() bool { return false }
|
||||
func (w WaitStatus) ExitStatus() int { return 0 }
|
||||
func (w WaitStatus) Signaled() bool { return false }
|
||||
func (w WaitStatus) Signal() Signal { return 0 }
|
||||
func (w WaitStatus) CoreDump() bool { return false }
|
||||
func (w WaitStatus) Stopped() bool { return false }
|
||||
func (w WaitStatus) Continued() bool { return false }
|
||||
func (w WaitStatus) StopSignal() Signal { return 0 }
|
||||
func (w WaitStatus) TrapCause() int { return 0 }
|
||||
|
||||
// XXX made up
|
||||
type Rusage struct {
|
||||
Utime Timeval
|
||||
Stime Timeval
|
||||
}
|
||||
|
||||
// XXX made up
|
||||
type ProcAttr struct {
|
||||
Dir string
|
||||
Env []string
|
||||
Files []uintptr
|
||||
Sys *SysProcAttr
|
||||
}
|
||||
|
||||
type SysProcAttr struct {
|
||||
}
|
||||
|
||||
// System
|
||||
|
||||
func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
|
||||
func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) { return 0, 0, ENOSYS }
|
||||
func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) { return 0, 0, ENOSYS }
|
||||
func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) {
|
||||
return 0, 0, ENOSYS
|
||||
}
|
||||
|
||||
func Sysctl(key string) (string, error) {
|
||||
if key == "kern.hostname" {
|
||||
return "naclbox", nil
|
||||
}
|
||||
return "", ENOSYS
|
||||
}
|
||||
|
||||
// Unimplemented Unix midden heap.
|
||||
|
||||
const ImplementsGetwd = false
|
||||
|
||||
func Getwd() (wd string, err error) { return "", ENOSYS }
|
||||
func Getegid() int { return 1 }
|
||||
func Geteuid() int { return 1 }
|
||||
func Getgid() int { return 1 }
|
||||
func Getgroups() ([]int, error) { return []int{1}, nil }
|
||||
func Getpagesize() int { return 65536 }
|
||||
func Getppid() int { return 2 }
|
||||
func Getpid() int { return 3 }
|
||||
func Getuid() int { return 1 }
|
||||
func Kill(pid int, signum Signal) error { return ENOSYS }
|
||||
func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
|
||||
return 0, ENOSYS
|
||||
}
|
||||
func StartProcess(argv0 string, argv []string, attr *ProcAttr) (pid int, handle uintptr, err error) {
|
||||
return 0, 0, ENOSYS
|
||||
}
|
||||
func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {
|
||||
return 0, ENOSYS
|
||||
}
|
||||
func RouteRIB(facility, param int) ([]byte, error) { return nil, ENOSYS }
|
||||
func ParseRoutingMessage(b []byte) ([]RoutingMessage, error) { return nil, ENOSYS }
|
||||
func ParseRoutingSockaddr(msg RoutingMessage) ([]Sockaddr, error) { return nil, ENOSYS }
|
||||
func SysctlUint32(name string) (value uint32, err error) { return 0, ENOSYS }
|
||||
Reference in New Issue
Block a user