aboutsummaryrefslogtreecommitdiff
path: root/vendor/rustix/src/backend/libc/rand/syscalls.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/rustix/src/backend/libc/rand/syscalls.rs')
-rw-r--r--vendor/rustix/src/backend/libc/rand/syscalls.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/vendor/rustix/src/backend/libc/rand/syscalls.rs b/vendor/rustix/src/backend/libc/rand/syscalls.rs
new file mode 100644
index 0000000..3a3929e
--- /dev/null
+++ b/vendor/rustix/src/backend/libc/rand/syscalls.rs
@@ -0,0 +1,18 @@
+//! libc syscalls supporting `rustix::rand`.
+
+#[cfg(linux_kernel)]
+use {crate::backend::c, crate::backend::conv::ret_usize, crate::io, crate::rand::GetRandomFlags};
+
+#[cfg(linux_kernel)]
+pub(crate) unsafe fn getrandom(
+ buf: *mut u8,
+ cap: usize,
+ flags: GetRandomFlags,
+) -> io::Result<usize> {
+ // `getrandom` wasn't supported in glibc until 2.25.
+ weak_or_syscall! {
+ fn getrandom(buf: *mut c::c_void, buflen: c::size_t, flags: c::c_uint) via SYS_getrandom -> c::ssize_t
+ }
+
+ ret_usize(getrandom(buf.cast(), cap, flags.bits()))
+}