Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(13)

Side by Side Diff: unix/syscall_nacl.go

Issue 126960043: code review 126960043: go.sys: copy files from syscall package to go.sys/{plan... (Closed)
Patch Set: diff -r 89b705e036f489a14b4d11c6e025ea61a53bb735 https://code.google.com/p/go.sys Created 10 years, 7 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « unix/syscall_linux_arm.go ('k') | unix/syscall_nacl_386.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package syscall
6
7 import (
8 "sync"
9 "unsafe"
10 )
11
12 //sys naclClose(fd int) (err error) = sys_close
13 //sys Exit(code int) (err error)
14 //sys naclFstat(fd int, stat *Stat_t) (err error) = sys_fstat
15 //sys naclRead(fd int, b []byte) (n int, err error) = sys_read
16 //sys naclSeek(fd int, off *int64, whence int) (err error) = sys_lseek
17
18 const direntSize = 8 + 8 + 2 + 256
19
20 // native_client/src/trusted/service_runtime/include/sys/dirent.h
21 type Dirent struct {
22 Ino int64
23 Off int64
24 Reclen uint16
25 Name [256]byte
26 }
27
28 func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
29 origlen := len(buf)
30 count = 0
31 for max != 0 && len(buf) > 0 {
32 dirent := (*Dirent)(unsafe.Pointer(&buf[0]))
33 buf = buf[dirent.Reclen:]
34 if dirent.Ino == 0 { // File absent in directory.
35 continue
36 }
37 bytes := (*[512 + PathMax]byte)(unsafe.Pointer(&dirent.Name[0]))
38 var name = string(bytes[0:clen(bytes[:])])
39 if name == "." || name == ".." { // Useless names
40 continue
41 }
42 max--
43 count++
44 names = append(names, name)
45 }
46 return origlen - len(buf), count, names
47 }
48
49 func clen(n []byte) int {
50 for i := 0; i < len(n); i++ {
51 if n[i] == 0 {
52 return i
53 }
54 }
55 return len(n)
56 }
57
58 const PathMax = 256
59
60 // An Errno is an unsigned number describing an error condition.
61 // It implements the error interface. The zero Errno is by convention
62 // a non-error, so code to convert from Errno to error should use:
63 // err = nil
64 // if errno != 0 {
65 // err = errno
66 // }
67 type Errno uintptr
68
69 func (e Errno) Error() string {
70 if 0 <= int(e) && int(e) < len(errorstr) {
71 s := errorstr[e]
72 if s != "" {
73 return s
74 }
75 }
76 return "errno " + itoa(int(e))
77 }
78
79 func (e Errno) Temporary() bool {
80 return e == EINTR || e == EMFILE || e.Timeout()
81 }
82
83 func (e Errno) Timeout() bool {
84 return e == EAGAIN || e == EWOULDBLOCK || e == ETIMEDOUT
85 }
86
87 // A Signal is a number describing a process signal.
88 // It implements the os.Signal interface.
89 type Signal int
90
91 const (
92 _ Signal = iota
93 SIGCHLD
94 SIGINT
95 SIGKILL
96 SIGTRAP
97 SIGQUIT
98 )
99
100 func (s Signal) Signal() {}
101
102 func (s Signal) String() string {
103 if 0 <= s && int(s) < len(signals) {
104 str := signals[s]
105 if str != "" {
106 return str
107 }
108 }
109 return "signal " + itoa(int(s))
110 }
111
112 var signals = [...]string{}
113
114 // File system
115
116 const (
117 Stdin = 0
118 Stdout = 1
119 Stderr = 2
120 )
121
122 // native_client/src/trusted/service_runtime/include/sys/fcntl.h
123 const (
124 O_RDONLY = 0
125 O_WRONLY = 1
126 O_RDWR = 2
127 O_ACCMODE = 3
128
129 O_CREAT = 0100
130 O_CREATE = O_CREAT // for ken
131 O_TRUNC = 01000
132 O_APPEND = 02000
133 O_EXCL = 0200
134 O_NONBLOCK = 04000
135 O_NDELAY = O_NONBLOCK
136 O_SYNC = 010000
137 O_FSYNC = O_SYNC
138 O_ASYNC = 020000
139
140 O_CLOEXEC = 0
141
142 FD_CLOEXEC = 1
143 )
144
145 // native_client/src/trusted/service_runtime/include/sys/fcntl.h
146 const (
147 F_DUPFD = 0
148 F_GETFD = 1
149 F_SETFD = 2
150 F_GETFL = 3
151 F_SETFL = 4
152 F_GETOWN = 5
153 F_SETOWN = 6
154 F_GETLK = 7
155 F_SETLK = 8
156 F_SETLKW = 9
157 F_RGETLK = 10
158 F_RSETLK = 11
159 F_CNVT = 12
160 F_RSETLKW = 13
161
162 F_RDLCK = 1
163 F_WRLCK = 2
164 F_UNLCK = 3
165 F_UNLKSYS = 4
166 )
167
168 // native_client/src/trusted/service_runtime/include/bits/stat.h
169 const (
170 S_IFMT = 0000370000
171 S_IFSHM_SYSV = 0000300000
172 S_IFSEMA = 0000270000
173 S_IFCOND = 0000260000
174 S_IFMUTEX = 0000250000
175 S_IFSHM = 0000240000
176 S_IFBOUNDSOCK = 0000230000
177 S_IFSOCKADDR = 0000220000
178 S_IFDSOCK = 0000210000
179
180 S_IFSOCK = 0000140000
181 S_IFLNK = 0000120000
182 S_IFREG = 0000100000
183 S_IFBLK = 0000060000
184 S_IFDIR = 0000040000
185 S_IFCHR = 0000020000
186 S_IFIFO = 0000010000
187
188 S_UNSUP = 0000370000
189
190 S_ISUID = 0004000
191 S_ISGID = 0002000
192 S_ISVTX = 0001000
193
194 S_IREAD = 0400
195 S_IWRITE = 0200
196 S_IEXEC = 0100
197
198 S_IRWXU = 0700
199 S_IRUSR = 0400
200 S_IWUSR = 0200
201 S_IXUSR = 0100
202
203 S_IRWXG = 070
204 S_IRGRP = 040
205 S_IWGRP = 020
206 S_IXGRP = 010
207
208 S_IRWXO = 07
209 S_IROTH = 04
210 S_IWOTH = 02
211 S_IXOTH = 01
212 )
213
214 // native_client/src/trusted/service_runtime/include/sys/stat.h
215 // native_client/src/trusted/service_runtime/include/machine/_types.h
216 type Stat_t struct {
217 Dev int64
218 Ino uint64
219 Mode uint32
220 Nlink uint32
221 Uid uint32
222 Gid uint32
223 Rdev int64
224 Size int64
225 Blksize int32
226 Blocks int32
227 Atime int64
228 AtimeNsec int64
229 Mtime int64
230 MtimeNsec int64
231 Ctime int64
232 CtimeNsec int64
233 }
234
235 // Processes
236 // Not supported on NaCl - just enough for package os.
237
238 var ForkLock sync.RWMutex
239
240 type WaitStatus uint32
241
242 func (w WaitStatus) Exited() bool { return false }
243 func (w WaitStatus) ExitStatus() int { return 0 }
244 func (w WaitStatus) Signaled() bool { return false }
245 func (w WaitStatus) Signal() Signal { return 0 }
246 func (w WaitStatus) CoreDump() bool { return false }
247 func (w WaitStatus) Stopped() bool { return false }
248 func (w WaitStatus) Continued() bool { return false }
249 func (w WaitStatus) StopSignal() Signal { return 0 }
250 func (w WaitStatus) TrapCause() int { return 0 }
251
252 // XXX made up
253 type Rusage struct {
254 Utime Timeval
255 Stime Timeval
256 }
257
258 // XXX made up
259 type ProcAttr struct {
260 Dir string
261 Env []string
262 Files []uintptr
263 Sys *SysProcAttr
264 }
265
266 type SysProcAttr struct {
267 }
268
269 // System
270
271 func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
272 func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) { return 0, 0, ENOSYS }
273 func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) { return 0, 0, ENOSYS }
274 func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errn o) {
275 return 0, 0, ENOSYS
276 }
277
278 func Sysctl(key string) (string, error) {
279 if key == "kern.hostname" {
280 return "naclbox", nil
281 }
282 return "", ENOSYS
283 }
284
285 // Unimplemented Unix midden heap.
286
287 const ImplementsGetwd = false
288
289 func Getwd() (wd string, err error) { return "", ENOSYS }
290 func Getegid() int { return 1 }
291 func Geteuid() int { return 1 }
292 func Getgid() int { return 1 }
293 func Getgroups() ([]int, error) { return []int{1}, nil }
294 func Getpagesize() int { return 65536 }
295 func Getppid() int { return 2 }
296 func Getpid() int { return 3 }
297 func Getuid() int { return 1 }
298 func Kill(pid int, signum Signal) error { return ENOSYS }
299 func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e rror) {
300 return 0, ENOSYS
301 }
302 func StartProcess(argv0 string, argv []string, attr *ProcAttr) (pid int, handle uintptr, err error) {
303 return 0, 0, ENOSYS
304 }
305 func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {
306 return 0, ENOSYS
307 }
308 func RouteRIB(facility, param int) ([]byte, error) { return nil, ENOSYS }
309 func ParseRoutingMessage(b []byte) ([]RoutingMessage, error) { return nil, ENOSYS }
310 func ParseRoutingSockaddr(msg RoutingMessage) ([]Sockaddr, error) { return nil, ENOSYS }
311 func SysctlUint32(name string) (value uint32, err error) { return 0, EN OSYS }
OLDNEW
« no previous file with comments | « unix/syscall_linux_arm.go ('k') | unix/syscall_nacl_386.go » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b