55 return nil, err |
73 return nil, err |
56 } |
74 } |
57 return buf[0 : n/siz], nil |
75 return buf[0 : n/siz], nil |
58 } |
76 } |
59 |
77 |
|
78 func direntIno(buf []byte) (uint64, bool) { |
|
79 return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) |
|
80 } |
|
81 |
|
82 func direntReclen(buf []byte) (uint64, bool) { |
|
83 namlen, ok := direntNamlen(buf) |
|
84 if !ok { |
|
85 return 0, false |
|
86 } |
|
87 return (16 + namlen + 1 + 7) &^ 7, true |
|
88 } |
|
89 |
|
90 func direntNamlen(buf []byte) (uint64, bool) { |
|
91 return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) |
|
92 } |
|
93 |
60 //sysnb pipe() (r int, w int, err error) |
94 //sysnb pipe() (r int, w int, err error) |
61 |
95 |
62 func Pipe(p []int) (err error) { |
96 func Pipe(p []int) (err error) { |
63 if len(p) != 2 { |
97 if len(p) != 2 { |
64 return EINVAL |
98 return EINVAL |
132 return ENOSYS |
166 return ENOSYS |
133 } |
167 } |
134 |
168 |
135 //sys ioctl(fd int, req uint, arg uintptr) (err error) |
169 //sys ioctl(fd int, req uint, arg uintptr) (err error) |
136 |
170 |
137 // ioctl itself should not be exposed directly, but additional get/set |
171 //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL |
138 // functions for specific types are permissible. |
|
139 |
|
140 // IoctlSetInt performs an ioctl operation which sets an integer value |
|
141 // on fd, using the specified request number. |
|
142 func IoctlSetInt(fd int, req uint, value int) error { |
|
143 return ioctl(fd, req, uintptr(value)) |
|
144 } |
|
145 |
|
146 func ioctlSetWinsize(fd int, req uint, value *Winsize) error { |
|
147 return ioctl(fd, req, uintptr(unsafe.Pointer(value))) |
|
148 } |
|
149 |
|
150 func ioctlSetTermios(fd int, req uint, value *Termios) error { |
|
151 return ioctl(fd, req, uintptr(unsafe.Pointer(value))) |
|
152 } |
|
153 |
|
154 // IoctlGetInt performs an ioctl operation which gets an integer value |
|
155 // from fd, using the specified request number. |
|
156 func IoctlGetInt(fd int, req uint) (int, error) { |
|
157 var value int |
|
158 err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) |
|
159 return value, err |
|
160 } |
|
161 |
|
162 func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { |
|
163 var value Winsize |
|
164 err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) |
|
165 return &value, err |
|
166 } |
|
167 |
|
168 func IoctlGetTermios(fd int, req uint) (*Termios, error) { |
|
169 var value Termios |
|
170 err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) |
|
171 return &value, err |
|
172 } |
|
173 |
172 |
174 func sysctlUname(mib []_C_int, old *byte, oldlen *uintptr) error { |
173 func sysctlUname(mib []_C_int, old *byte, oldlen *uintptr) error { |
175 err := sysctl(mib, old, oldlen, nil, 0) |
174 err := sysctl(mib, old, oldlen, nil, 0) |
176 if err != nil { |
175 if err != nil { |
177 // Utsname members on Dragonfly are only 32 bytes and |
176 // Utsname members on Dragonfly are only 32 bytes and |
246 //sys Chroot(path string) (err error) |
252 //sys Chroot(path string) (err error) |
247 //sys Close(fd int) (err error) |
253 //sys Close(fd int) (err error) |
248 //sys Dup(fd int) (nfd int, err error) |
254 //sys Dup(fd int) (nfd int, err error) |
249 //sys Dup2(from int, to int) (err error) |
255 //sys Dup2(from int, to int) (err error) |
250 //sys Exit(code int) |
256 //sys Exit(code int) |
|
257 //sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) |
251 //sys Fchdir(fd int) (err error) |
258 //sys Fchdir(fd int) (err error) |
252 //sys Fchflags(fd int, flags int) (err error) |
259 //sys Fchflags(fd int, flags int) (err error) |
253 //sys Fchmod(fd int, mode uint32) (err error) |
260 //sys Fchmod(fd int, mode uint32) (err error) |
254 //sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) |
261 //sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) |
255 //sys Fchown(fd int, uid int, gid int) (err error) |
262 //sys Fchown(fd int, uid int, gid int) (err error) |
|
263 //sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) |
256 //sys Flock(fd int, how int) (err error) |
264 //sys Flock(fd int, how int) (err error) |
257 //sys Fpathconf(fd int, name int) (val int, err error) |
265 //sys Fpathconf(fd int, name int) (val int, err error) |
258 //sys Fstat(fd int, stat *Stat_t) (err error) |
266 //sys Fstat(fd int, stat *Stat_t) (err error) |
259 //sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) |
267 //sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) |
260 //sys Fstatfs(fd int, stat *Statfs_t) (err error) |
268 //sys Fstatfs(fd int, stat *Statfs_t) (err error) |
261 //sys Fsync(fd int) (err error) |
269 //sys Fsync(fd int) (err error) |
262 //sys Ftruncate(fd int, length int64) (err error) |
270 //sys Ftruncate(fd int, length int64) (err error) |
|
271 //sys Getdents(fd int, buf []byte) (n int, err error) |
263 //sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) |
272 //sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) |
264 //sys Getdtablesize() (size int) |
273 //sys Getdtablesize() (size int) |
265 //sysnb Getegid() (egid int) |
274 //sysnb Getegid() (egid int) |
266 //sysnb Geteuid() (uid int) |
275 //sysnb Geteuid() (uid int) |
267 //sysnb Getgid() (gid int) |
276 //sysnb Getgid() (gid int) |
278 //sys Issetugid() (tainted bool) |
287 //sys Issetugid() (tainted bool) |
279 //sys Kill(pid int, signum syscall.Signal) (err error) |
288 //sys Kill(pid int, signum syscall.Signal) (err error) |
280 //sys Kqueue() (fd int, err error) |
289 //sys Kqueue() (fd int, err error) |
281 //sys Lchown(path string, uid int, gid int) (err error) |
290 //sys Lchown(path string, uid int, gid int) (err error) |
282 //sys Link(path string, link string) (err error) |
291 //sys Link(path string, link string) (err error) |
|
292 //sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) |
283 //sys Listen(s int, backlog int) (err error) |
293 //sys Listen(s int, backlog int) (err error) |
284 //sys Lstat(path string, stat *Stat_t) (err error) |
294 //sys Lstat(path string, stat *Stat_t) (err error) |
285 //sys Mkdir(path string, mode uint32) (err error) |
295 //sys Mkdir(path string, mode uint32) (err error) |
|
296 //sys Mkdirat(dirfd int, path string, mode uint32) (err error) |
286 //sys Mkfifo(path string, mode uint32) (err error) |
297 //sys Mkfifo(path string, mode uint32) (err error) |
287 //sys Mknod(path string, mode uint32, dev int) (err error) |
298 //sys Mknod(path string, mode uint32, dev int) (err error) |
|
299 //sys Mknodat(fd int, path string, mode uint32, dev int) (err error) |
288 //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) |
300 //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) |
289 //sys Open(path string, mode int, perm uint32) (fd int, err error) |
301 //sys Open(path string, mode int, perm uint32) (fd int, err error) |
|
302 //sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) |
290 //sys Pathconf(path string, name int) (val int, err error) |
303 //sys Pathconf(path string, name int) (val int, err error) |
291 //sys read(fd int, p []byte) (n int, err error) |
304 //sys read(fd int, p []byte) (n int, err error) |
292 //sys Readlink(path string, buf []byte) (n int, err error) |
305 //sys Readlink(path string, buf []byte) (n int, err error) |
293 //sys Rename(from string, to string) (err error) |
306 //sys Rename(from string, to string) (err error) |
|
307 //sys Renameat(fromfd int, from string, tofd int, to string) (err error) |
294 //sys Revoke(path string) (err error) |
308 //sys Revoke(path string) (err error) |
295 //sys Rmdir(path string) (err error) |
309 //sys Rmdir(path string) (err error) |
296 //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK |
310 //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK |
297 //sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) |
311 //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) |
298 //sysnb Setegid(egid int) (err error) |
312 //sysnb Setegid(egid int) (err error) |
299 //sysnb Seteuid(euid int) (err error) |
313 //sysnb Seteuid(euid int) (err error) |
300 //sysnb Setgid(gid int) (err error) |
314 //sysnb Setgid(gid int) (err error) |
301 //sys Setlogin(name string) (err error) |
315 //sys Setlogin(name string) (err error) |
302 //sysnb Setpgid(pid int, pgid int) (err error) |
316 //sysnb Setpgid(pid int, pgid int) (err error) |
310 //sysnb Settimeofday(tp *Timeval) (err error) |
324 //sysnb Settimeofday(tp *Timeval) (err error) |
311 //sysnb Setuid(uid int) (err error) |
325 //sysnb Setuid(uid int) (err error) |
312 //sys Stat(path string, stat *Stat_t) (err error) |
326 //sys Stat(path string, stat *Stat_t) (err error) |
313 //sys Statfs(path string, stat *Statfs_t) (err error) |
327 //sys Statfs(path string, stat *Statfs_t) (err error) |
314 //sys Symlink(path string, link string) (err error) |
328 //sys Symlink(path string, link string) (err error) |
|
329 //sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) |
315 //sys Sync() (err error) |
330 //sys Sync() (err error) |
316 //sys Truncate(path string, length int64) (err error) |
331 //sys Truncate(path string, length int64) (err error) |
317 //sys Umask(newmask int) (oldmask int) |
332 //sys Umask(newmask int) (oldmask int) |
318 //sys Undelete(path string) (err error) |
333 //sys Undelete(path string) (err error) |
319 //sys Unlink(path string) (err error) |
334 //sys Unlink(path string) (err error) |
|
335 //sys Unlinkat(dirfd int, path string, flags int) (err error) |
320 //sys Unmount(path string, flags int) (err error) |
336 //sys Unmount(path string, flags int) (err error) |
321 //sys write(fd int, p []byte) (n int, err error) |
337 //sys write(fd int, p []byte) (n int, err error) |
322 //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) |
338 //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) |
323 //sys munmap(addr uintptr, length uintptr) (err error) |
339 //sys munmap(addr uintptr, length uintptr) (err error) |
324 //sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ |
340 //sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ |