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
}
|