39 } |
39 } |
40 return Pselect(nfd, r, w, e, ts, nil) |
40 return Pselect(nfd, r, w, e, ts, nil) |
41 } |
41 } |
42 |
42 |
43 //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) |
43 //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) |
44 //sys Setfsgid(gid int) (err error) |
44 //sys setfsgid(gid int) (prev int, err error) |
45 //sys Setfsuid(uid int) (err error) |
45 //sys setfsuid(uid int) (prev int, err error) |
46 //sysnb Setregid(rgid int, egid int) (err error) |
46 //sysnb Setregid(rgid int, egid int) (err error) |
47 //sysnb Setresgid(rgid int, egid int, sgid int) (err error) |
47 //sysnb Setresgid(rgid int, egid int, sgid int) (err error) |
48 //sysnb Setresuid(ruid int, euid int, suid int) (err error) |
48 //sysnb Setresuid(ruid int, euid int, suid int) (err error) |
49 //sysnb Setrlimit(resource int, rlim *Rlimit) (err error) |
49 //sysnb Setrlimit(resource int, rlim *Rlimit) (err error) |
50 //sysnb Setreuid(ruid int, euid int) (err error) |
50 //sysnb Setreuid(ruid int, euid int) (err error) |
177 |
177 |
178 func (msghdr *Msghdr) SetControllen(length int) { |
178 func (msghdr *Msghdr) SetControllen(length int) { |
179 msghdr.Controllen = uint64(length) |
179 msghdr.Controllen = uint64(length) |
180 } |
180 } |
181 |
181 |
|
182 func (msghdr *Msghdr) SetIovlen(length int) { |
|
183 msghdr.Iovlen = uint64(length) |
|
184 } |
|
185 |
182 func (cmsg *Cmsghdr) SetLen(length int) { |
186 func (cmsg *Cmsghdr) SetLen(length int) { |
183 cmsg.Len = uint64(length) |
187 cmsg.Len = uint64(length) |
184 } |
188 } |
185 |
189 |
186 func InotifyInit() (fd int, err error) { |
190 func InotifyInit() (fd int, err error) { |
189 |
193 |
190 func Dup2(oldfd int, newfd int) (err error) { |
194 func Dup2(oldfd int, newfd int) (err error) { |
191 return Dup3(oldfd, newfd, 0) |
195 return Dup3(oldfd, newfd, 0) |
192 } |
196 } |
193 |
197 |
194 func Pause() (err error) { |
198 func Pause() error { |
195 _, _, e1 := Syscall6(SYS_PPOLL, 0, 0, 0, 0, 0, 0) |
199 _, err := ppoll(nil, 0, nil, nil) |
196 if e1 != 0 { |
200 return err |
197 err = errnoErr(e1) |
|
198 } |
|
199 return |
|
200 } |
201 } |
201 |
202 |
202 func Poll(fds []PollFd, timeout int) (n int, err error) { |
203 func Poll(fds []PollFd, timeout int) (n int, err error) { |
203 var ts *Timespec |
204 var ts *Timespec |
204 if timeout >= 0 { |
205 if timeout >= 0 { |
208 if len(fds) == 0 { |
209 if len(fds) == 0 { |
209 return ppoll(nil, 0, ts, nil) |
210 return ppoll(nil, 0, ts, nil) |
210 } |
211 } |
211 return ppoll(&fds[0], len(fds), ts, nil) |
212 return ppoll(&fds[0], len(fds), ts, nil) |
212 } |
213 } |
|
214 |
|
215 func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { |
|
216 return Renameat2(olddirfd, oldpath, newdirfd, newpath, 0) |
|
217 } |
|
218 |
|
219 //sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) |
|
220 |
|
221 func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { |
|
222 cmdlineLen := len(cmdline) |
|
223 if cmdlineLen > 0 { |
|
224 // Account for the additional NULL byte added by |
|
225 // BytePtrFromString in kexecFileLoad. The kexec_file_load |
|
226 // syscall expects a NULL-terminated string. |
|
227 cmdlineLen++ |
|
228 } |
|
229 return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) |
|
230 } |