cubefs

Форк
0
/x
/
syscall_illumos.go 
79 строк · 1.8 Кб
1
// Copyright 2021 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

5
// illumos system calls not present on Solaris.
6

7
//go:build amd64 && illumos
8
// +build amd64,illumos
9

10
package unix
11

12
import (
13
	"unsafe"
14
)
15

16
func bytes2iovec(bs [][]byte) []Iovec {
17
	iovecs := make([]Iovec, len(bs))
18
	for i, b := range bs {
19
		iovecs[i].SetLen(len(b))
20
		if len(b) > 0 {
21
			iovecs[i].Base = &b[0]
22
		} else {
23
			iovecs[i].Base = (*byte)(unsafe.Pointer(&_zero))
24
		}
25
	}
26
	return iovecs
27
}
28

29
//sys	readv(fd int, iovs []Iovec) (n int, err error)
30

31
func Readv(fd int, iovs [][]byte) (n int, err error) {
32
	iovecs := bytes2iovec(iovs)
33
	n, err = readv(fd, iovecs)
34
	return n, err
35
}
36

37
//sys	preadv(fd int, iovs []Iovec, off int64) (n int, err error)
38

39
func Preadv(fd int, iovs [][]byte, off int64) (n int, err error) {
40
	iovecs := bytes2iovec(iovs)
41
	n, err = preadv(fd, iovecs, off)
42
	return n, err
43
}
44

45
//sys	writev(fd int, iovs []Iovec) (n int, err error)
46

47
func Writev(fd int, iovs [][]byte) (n int, err error) {
48
	iovecs := bytes2iovec(iovs)
49
	n, err = writev(fd, iovecs)
50
	return n, err
51
}
52

53
//sys	pwritev(fd int, iovs []Iovec, off int64) (n int, err error)
54

55
func Pwritev(fd int, iovs [][]byte, off int64) (n int, err error) {
56
	iovecs := bytes2iovec(iovs)
57
	n, err = pwritev(fd, iovecs, off)
58
	return n, err
59
}
60

61
//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) = libsocket.accept4
62

63
func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
64
	var rsa RawSockaddrAny
65
	var len _Socklen = SizeofSockaddrAny
66
	nfd, err = accept4(fd, &rsa, &len, flags)
67
	if err != nil {
68
		return
69
	}
70
	if len > SizeofSockaddrAny {
71
		panic("RawSockaddrAny too small")
72
	}
73
	sa, err = anyToSockaddr(fd, &rsa)
74
	if err != nil {
75
		Close(nfd)
76
		nfd = 0
77
	}
78
	return
79
}
80

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.