18 //sysnb Getegid() (egid int) |
18 //sysnb Getegid() (egid int) |
19 //sysnb Geteuid() (euid int) |
19 //sysnb Geteuid() (euid int) |
20 //sysnb Getgid() (gid int) |
20 //sysnb Getgid() (gid int) |
21 //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) |
21 //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) |
22 //sysnb Getuid() (uid int) |
22 //sysnb Getuid() (uid int) |
23 //sysnb InotifyInit() (fd int, err error) |
23 //sysnb inotifyInit() (fd int, err error) |
|
24 |
|
25 func InotifyInit() (fd int, err error) { |
|
26 // First try inotify_init1, because Android's seccomp policy blocks the latter. |
|
27 fd, err = InotifyInit1(0) |
|
28 if err == ENOSYS { |
|
29 fd, err = inotifyInit() |
|
30 } |
|
31 return |
|
32 } |
|
33 |
24 //sys Ioperm(from int, num int, on int) (err error) |
34 //sys Ioperm(from int, num int, on int) (err error) |
25 //sys Iopl(level int) (err error) |
35 //sys Iopl(level int) (err error) |
26 //sys Lchown(path string, uid int, gid int) (err error) |
36 //sys Lchown(path string, uid int, gid int) (err error) |
27 //sys Listen(s int, n int) (err error) |
37 //sys Listen(s int, n int) (err error) |
28 //sys Lstat(path string, stat *Stat_t) (err error) |
38 |
|
39 func Lstat(path string, stat *Stat_t) (err error) { |
|
40 return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) |
|
41 } |
|
42 |
29 //sys Pause() (err error) |
43 //sys Pause() (err error) |
30 //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 |
44 //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 |
31 //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 |
45 //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 |
|
46 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) |
32 //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK |
47 //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK |
33 |
48 |
34 func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { |
49 func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { |
35 var ts *Timespec |
50 var ts *Timespec |
36 if timeout != nil { |
51 if timeout != nil { |
38 } |
53 } |
39 return Pselect(nfd, r, w, e, ts, nil) |
54 return Pselect(nfd, r, w, e, ts, nil) |
40 } |
55 } |
41 |
56 |
42 //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) |
57 //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) |
43 //sys Setfsgid(gid int) (err error) |
58 //sys setfsgid(gid int) (prev int, err error) |
44 //sys Setfsuid(uid int) (err error) |
59 //sys setfsuid(uid int) (prev int, err error) |
45 //sysnb Setregid(rgid int, egid int) (err error) |
60 //sysnb Setregid(rgid int, egid int) (err error) |
46 //sysnb Setresgid(rgid int, egid int, sgid int) (err error) |
61 //sysnb Setresgid(rgid int, egid int, sgid int) (err error) |
47 //sysnb Setresuid(ruid int, euid int, suid int) (err error) |
62 //sysnb Setresuid(ruid int, euid int, suid int) (err error) |
48 //sysnb Setrlimit(resource int, rlim *Rlimit) (err error) |
63 //sysnb Setrlimit(resource int, rlim *Rlimit) (err error) |
49 //sysnb Setreuid(ruid int, euid int) (err error) |
64 //sysnb Setreuid(ruid int, euid int) (err error) |
146 |
161 |
147 func (msghdr *Msghdr) SetControllen(length int) { |
162 func (msghdr *Msghdr) SetControllen(length int) { |
148 msghdr.Controllen = uint64(length) |
163 msghdr.Controllen = uint64(length) |
149 } |
164 } |
150 |
165 |
|
166 func (msghdr *Msghdr) SetIovlen(length int) { |
|
167 msghdr.Iovlen = uint64(length) |
|
168 } |
|
169 |
151 func (cmsg *Cmsghdr) SetLen(length int) { |
170 func (cmsg *Cmsghdr) SetLen(length int) { |
152 cmsg.Len = uint64(length) |
171 cmsg.Len = uint64(length) |
153 } |
172 } |
154 |
173 |
155 //sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) |
174 //sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) |
158 if len(fds) == 0 { |
177 if len(fds) == 0 { |
159 return poll(nil, 0, timeout) |
178 return poll(nil, 0, timeout) |
160 } |
179 } |
161 return poll(&fds[0], len(fds), timeout) |
180 return poll(&fds[0], len(fds), timeout) |
162 } |
181 } |
|
182 |
|
183 //sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) |
|
184 |
|
185 func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { |
|
186 cmdlineLen := len(cmdline) |
|
187 if cmdlineLen > 0 { |
|
188 // Account for the additional NULL byte added by |
|
189 // BytePtrFromString in kexecFileLoad. The kexec_file_load |
|
190 // syscall expects a NULL-terminated string. |
|
191 cmdlineLen++ |
|
192 } |
|
193 return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) |
|
194 } |