arandom_netbsd.mx raw

   1  // Copyright 2023 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  package unix
   6  
   7  import (
   8  	"syscall"
   9  	"unsafe"
  10  )
  11  
  12  const (
  13  	_CTL_KERN = 1
  14  
  15  	_KERN_ARND = 81
  16  )
  17  
  18  func Arandom(p []byte) error {
  19  	mib := [2]uint32{_CTL_KERN, _KERN_ARND}
  20  	n := uintptr(len(p))
  21  	_, _, errno := syscall.Syscall6(
  22  		syscall.SYS___SYSCTL,
  23  		uintptr(unsafe.Pointer(&mib[0])),
  24  		uintptr(len(mib)),
  25  		uintptr(unsafe.Pointer(&p[0])), // olddata
  26  		uintptr(unsafe.Pointer(&n)),    // &oldlen
  27  		uintptr(unsafe.Pointer(nil)),   // newdata
  28  		0)                              // newlen
  29  	if errno != 0 {
  30  		return syscall.Errno(errno)
  31  	}
  32  	if n != uintptr(len(p)) {
  33  		return syscall.EINVAL
  34  	}
  35  	return nil
  36  }
  37