1 // Copyright 2009 The Go Authors. All rights reserved. |
1 // Copyright 2009 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style |
2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. |
3 // license that can be found in the LICENSE file. |
4 |
4 |
|
5 //go:build arm && linux |
5 // +build arm,linux |
6 // +build arm,linux |
6 |
7 |
7 package unix |
8 package unix |
8 |
9 |
9 import ( |
10 import ( |
10 "syscall" |
|
11 "unsafe" |
11 "unsafe" |
12 ) |
12 ) |
13 |
13 |
14 func setTimespec(sec, nsec int64) Timespec { |
14 func setTimespec(sec, nsec int64) Timespec { |
15 return Timespec{Sec: int32(sec), Nsec: int32(nsec)} |
15 return Timespec{Sec: int32(sec), Nsec: int32(nsec)} |
46 err = pipe2(&pp, flags) |
46 err = pipe2(&pp, flags) |
47 p[0] = int(pp[0]) |
47 p[0] = int(pp[0]) |
48 p[1] = int(pp[1]) |
48 p[1] = int(pp[1]) |
49 return |
49 return |
50 } |
50 } |
51 |
|
52 // Underlying system call writes to newoffset via pointer. |
|
53 // Implemented in assembly to avoid allocation. |
|
54 func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno) |
|
55 |
51 |
56 func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { |
52 func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { |
57 newoffset, errno := seek(fd, offset, whence) |
53 newoffset, errno := seek(fd, offset, whence) |
58 if errno != 0 { |
54 if errno != 0 { |
59 return 0, errno |
55 return 0, errno |
78 //sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) |
74 //sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) |
79 //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) |
75 //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) |
80 |
76 |
81 // 64-bit file system and 32-bit uid calls |
77 // 64-bit file system and 32-bit uid calls |
82 // (16-bit uid calls are not always supported in newer kernels) |
78 // (16-bit uid calls are not always supported in newer kernels) |
83 //sys Dup2(oldfd int, newfd int) (err error) |
79 //sys dup2(oldfd int, newfd int) (err error) |
84 //sysnb EpollCreate(size int) (fd int, err error) |
80 //sysnb EpollCreate(size int) (fd int, err error) |
85 //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) |
81 //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) |
86 //sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 |
82 //sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 |
87 //sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 |
83 //sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 |
88 //sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 |
84 //sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 |
132 return Utimes(path, tv) |
128 return Utimes(path, tv) |
133 } |
129 } |
134 |
130 |
135 //sys utimes(path string, times *[2]Timeval) (err error) |
131 //sys utimes(path string, times *[2]Timeval) (err error) |
136 |
132 |
137 //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 |
133 //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 |
138 //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 |
134 //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 |
139 //sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 |
135 //sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 |
140 //sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 |
136 //sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 |
141 |
137 |
142 func Fadvise(fd int, offset int64, length int64, advice int) (err error) { |
138 func Fadvise(fd int, offset int64, length int64, advice int) (err error) { |
143 _, _, e1 := Syscall6(SYS_ARM_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32)) |
139 _, _, e1 := Syscall6(SYS_ARM_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32)) |
180 type rlimit32 struct { |
176 type rlimit32 struct { |
181 Cur uint32 |
177 Cur uint32 |
182 Max uint32 |
178 Max uint32 |
183 } |
179 } |
184 |
180 |
185 //sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT |
181 //sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT |
186 |
182 |
187 const rlimInf32 = ^uint32(0) |
183 const rlimInf32 = ^uint32(0) |
188 const rlimInf64 = ^uint64(0) |
184 const rlimInf64 = ^uint64(0) |
189 |
185 |
190 func Getrlimit(resource int, rlim *Rlimit) (err error) { |
186 func Getrlimit(resource int, rlim *Rlimit) (err error) { |
211 rlim.Max = uint64(rl.Max) |
207 rlim.Max = uint64(rl.Max) |
212 } |
208 } |
213 return |
209 return |
214 } |
210 } |
215 |
211 |
216 //sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT |
212 //sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT |
217 |
213 |
218 func Setrlimit(resource int, rlim *Rlimit) (err error) { |
214 func Setrlimit(resource int, rlim *Rlimit) (err error) { |
219 err = prlimit(0, resource, rlim, nil) |
215 err = prlimit(0, resource, rlim, nil) |
220 if err != ENOSYS { |
216 if err != ENOSYS { |
221 return err |
217 return err |
256 msghdr.Iovlen = uint32(length) |
252 msghdr.Iovlen = uint32(length) |
257 } |
253 } |
258 |
254 |
259 func (cmsg *Cmsghdr) SetLen(length int) { |
255 func (cmsg *Cmsghdr) SetLen(length int) { |
260 cmsg.Len = uint32(length) |
256 cmsg.Len = uint32(length) |
|
257 } |
|
258 |
|
259 func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { |
|
260 rsa.Service_name_len = uint32(length) |
261 } |
261 } |
262 |
262 |
263 //sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) |
263 //sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) |
264 |
264 |
265 func Poll(fds []PollFd, timeout int) (n int, err error) { |
265 func Poll(fds []PollFd, timeout int) (n int, err error) { |