aboutsummaryrefslogtreecommitdiff
path: root/vendor/rustix/src/backend/linux_raw/system/syscalls.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/rustix/src/backend/linux_raw/system/syscalls.rs')
-rw-r--r--vendor/rustix/src/backend/linux_raw/system/syscalls.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/vendor/rustix/src/backend/linux_raw/system/syscalls.rs b/vendor/rustix/src/backend/linux_raw/system/syscalls.rs
new file mode 100644
index 0000000..6b41cdb
--- /dev/null
+++ b/vendor/rustix/src/backend/linux_raw/system/syscalls.rs
@@ -0,0 +1,49 @@
+//! linux_raw syscalls supporting `rustix::system`.
+//!
+//! # Safety
+//!
+//! See the `rustix::backend` module documentation for details.
+#![allow(unsafe_code, clippy::undocumented_unsafe_blocks)]
+
+use super::types::RawUname;
+use crate::backend::c;
+use crate::backend::conv::{c_int, ret, ret_infallible, slice};
+use crate::io;
+use crate::system::{RebootCommand, Sysinfo};
+use core::mem::MaybeUninit;
+
+#[inline]
+pub(crate) fn uname() -> RawUname {
+ let mut uname = MaybeUninit::<RawUname>::uninit();
+ unsafe {
+ ret_infallible(syscall!(__NR_uname, &mut uname));
+ uname.assume_init()
+ }
+}
+
+#[inline]
+pub(crate) fn sysinfo() -> Sysinfo {
+ let mut info = MaybeUninit::<Sysinfo>::uninit();
+ unsafe {
+ ret_infallible(syscall!(__NR_sysinfo, &mut info));
+ info.assume_init()
+ }
+}
+
+#[inline]
+pub(crate) fn sethostname(name: &[u8]) -> io::Result<()> {
+ let (ptr, len) = slice(name);
+ unsafe { ret(syscall_readonly!(__NR_sethostname, ptr, len)) }
+}
+
+#[inline]
+pub(crate) fn reboot(cmd: RebootCommand) -> io::Result<()> {
+ unsafe {
+ ret(syscall_readonly!(
+ __NR_reboot,
+ c_int(c::LINUX_REBOOT_MAGIC1),
+ c_int(c::LINUX_REBOOT_MAGIC2),
+ c_int(cmd as i32)
+ ))
+ }
+}