limine_protocol_for_rust/requests/
executable_cmdline.rs

1//![Executable Command Line Feature](https://codeberg.org/Limine/limine-protocol/src/branch/trunk/PROTOCOL.md#executable-command-line-feature)
2use crate::requests::LimineRequest;
3use core::mem::MaybeUninit;
4use crate::{impl_limine_req, LimineReqId};
5use core::ffi::{c_char, CStr};
6
7#[repr(C, align(8))]
8pub struct ExecutableCmdlineRequest{
9    id: LimineReqId,
10    revision: u64,
11    resp: MaybeUninit<usize>
12}
13
14impl ExecutableCmdlineRequest {
15    pub const fn new(revision: u64) -> Self {
16        Self {
17            id: LimineReqId::new([0x4b161536e598651e, 0xb390ad4a2f1f303a]),
18            revision,
19            resp: MaybeUninit::uninit()
20        }
21    }
22}
23
24impl_limine_req!(ExecutableCmdlineRequest, ExecutableCmdlineResponse);
25
26#[repr(C, align(8))]
27#[derive(Copy, Clone)]
28pub struct ExecutableCmdlineResponse {
29    revision: u64,
30    cmdline: *const u8,
31}
32impl ExecutableCmdlineResponse {
33    pub fn get_cmdline(&self) -> &str {
34        unsafe {
35            CStr::from_ptr(self.cmdline as *const c_char).to_str().unwrap()
36        }
37    }
38}