blob: 21e03958cdc55f684b767aaaffa38a5dacf00407 [file] [log] [blame]
Rob Pike20acc5c2014-08-11 14:48:46 -07001// Copyright 2009 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
Shenghou Ma379497e2015-05-16 21:52:17 -04005// +build 386,freebsd
6
Rob Pike8442dd22014-08-11 15:58:26 -07007package unix
Rob Pike20acc5c2014-08-11 14:48:46 -07008
Rob Pikedc3c21c2014-08-15 09:57:24 -07009import (
10 "syscall"
11 "unsafe"
12)
Rob Pike20acc5c2014-08-11 14:48:46 -070013
Tobias Klausere8259732017-10-24 09:53:40 +020014func setTimespec(sec, nsec int64) Timespec {
15 return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
Rob Pike20acc5c2014-08-11 14:48:46 -070016}
17
Tobias Klausere8259732017-10-24 09:53:40 +020018func setTimeval(sec, usec int64) Timeval {
19 return Timeval{Sec: int32(sec), Usec: int32(usec)}
Rob Pike20acc5c2014-08-11 14:48:46 -070020}
21
22func SetKevent(k *Kevent_t, fd, mode, flags int) {
23 k.Ident = uint32(fd)
24 k.Filter = int16(mode)
25 k.Flags = uint16(flags)
26}
27
28func (iov *Iovec) SetLen(length int) {
29 iov.Len = uint32(length)
30}
31
32func (msghdr *Msghdr) SetControllen(length int) {
33 msghdr.Controllen = uint32(length)
34}
35
36func (cmsg *Cmsghdr) SetLen(length int) {
37 cmsg.Len = uint32(length)
38}
39
40func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
41 var writtenOut uint64 = 0
42 _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0)
43
44 written = int(writtenOut)
45
46 if e1 != 0 {
47 err = e1
48 }
49 return
50}
51
Rob Pikedc3c21c2014-08-15 09:57:24 -070052func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)