summaryrefslogtreecommitdiffstats
path: root/contrib/go/_std_1.24/src/internal/syscall/unix/arandom_netbsd.go
blob: 23ca8739e81b2394c10248acc7ee69c43d6cdc2b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Copyright 2023 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package unix

import (
	"syscall"
	"unsafe"
)

const (
	_CTL_KERN = 1

	_KERN_ARND = 81
)

func Arandom(p []byte) error {
	mib := [2]uint32{_CTL_KERN, _KERN_ARND}
	n := uintptr(len(p))
	_, _, errno := syscall.Syscall6(
		syscall.SYS___SYSCTL,
		uintptr(unsafe.Pointer(&mib[0])),
		uintptr(len(mib)),
		uintptr(unsafe.Pointer(&p[0])), // olddata
		uintptr(unsafe.Pointer(&n)),    // &oldlen
		uintptr(unsafe.Pointer(nil)),   // newdata
		0)                              // newlen
	if errno != 0 {
		return syscall.Errno(errno)
	}
	if n != uintptr(len(p)) {
		return syscall.EINVAL
	}
	return nil
}