kernel/
macros.rs

1//! Macros for kernel development.
2
3/// Creates a slice from the raw arguments.
4#[macro_export]
5macro_rules! args_from_raw {
6    ($argc:expr, $argv:expr) => {{
7        let argc = $argc;
8        let argv = $argv;
9
10        if argc == 0 || argv.is_null() {
11            &[]
12        } else {
13            unsafe { core::slice::from_raw_parts(argv, argc) }
14        }
15    }};
16}
17
18#[macro_export]
19macro_rules! kprint {
20    ($($arg:tt)*) => ({
21        use core::fmt::Write;
22        use $crate::print::Printer;
23        let mut printer = Printer;
24        printer.write_fmt(format_args!($($arg)*)).unwrap();
25    });
26}
27
28#[macro_export]
29macro_rules! kprintln {
30    ($($arg:tt)*) => ({
31        use core::fmt::Write;
32        use $crate::print::Printer;
33        let mut printer = Printer;
34        printer.write_fmt(format_args!($($arg)*)).unwrap();
35        printer.write_str("\n").unwrap();
36    });
37}