diff options
| author | mo khan <mo@mokhan.ca> | 2025-07-02 18:36:06 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-07-02 18:36:06 -0600 |
| commit | 8cdfa445d6629ffef4cb84967ff7017654045bc2 (patch) | |
| tree | 22f0b0907c024c78d26a731e2e1f5219407d8102 /vendor/rustix/src/rand/getrandom.rs | |
| parent | 4351c74c7c5f97156bc94d3a8549b9940ac80e3f (diff) | |
chore: add vendor directory
Diffstat (limited to 'vendor/rustix/src/rand/getrandom.rs')
| -rw-r--r-- | vendor/rustix/src/rand/getrandom.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/vendor/rustix/src/rand/getrandom.rs b/vendor/rustix/src/rand/getrandom.rs new file mode 100644 index 00000000..69af9a3d --- /dev/null +++ b/vendor/rustix/src/rand/getrandom.rs @@ -0,0 +1,33 @@ +//! Wrappers for `getrandom`. + +#![allow(unsafe_code)] + +use crate::buffer::Buffer; +use crate::{backend, io}; + +pub use backend::rand::types::GetRandomFlags; + +/// `getrandom(buf, flags)`—Reads a sequence of random bytes. +/// +/// This is a very low-level API which may be difficult to use correctly. Most +/// users should prefer to use [`getrandom`] or [`rand`] APIs instead. +/// +/// This function is implemented using a system call, and not the +/// [vDSO mechanism] introduced in Linux 6.11. See [#1185] for details. +/// +/// [`getrandom`]: https://crates.io/crates/getrandom +/// [`rand`]: https://crates.io/crates/rand +/// [vDSO mechanism]: https://lwn.net/Articles/983186/ +/// [#1185]: https://github.com/bytecodealliance/rustix/issues/1185 +/// +/// # References +/// - [Linux] +/// +/// [Linux]: https://man7.org/linux/man-pages/man2/getrandom.2.html +#[inline] +pub fn getrandom<Buf: Buffer<u8>>(mut buf: Buf, flags: GetRandomFlags) -> io::Result<Buf::Output> { + // SAFETY: `getrandom` behaves. + let len = unsafe { backend::rand::syscalls::getrandom(buf.parts_mut(), flags)? }; + // SAFETY: `getrandom` behaves. + unsafe { Ok(buf.assume_init(len)) } +} |
