Format code

This commit is contained in:
pjht 2024-08-06 18:58:26 -05:00
parent 1ceb2e1607
commit 5558fa427b
Signed by: pjht
GPG Key ID: 7B5F6AFBEC7EE78E

View File

@ -1,8 +1,9 @@
use crate::{ use crate::{
gdt, println, qemu_exit, virtual_memory::{ASpaceMutex, AddressSpace, PagingError, KERNEL_SPACE} gdt, println, qemu_exit,
virtual_memory::{ASpaceMutex, AddressSpace, PagingError, KERNEL_SPACE},
}; };
use alloc::{borrow::ToOwned, boxed::Box, collections::VecDeque, ffi::CString, vec::Vec}; use alloc::{borrow::ToOwned, boxed::Box, collections::VecDeque, ffi::CString, vec::Vec};
use core::{alloc::Layout, arch::asm, ptr::addr_of, ffi::CStr}; use core::{alloc::Layout, arch::asm, ffi::CStr, ptr::addr_of};
use crossbeam_queue::SegQueue; use crossbeam_queue::SegQueue;
use slab::Slab; use slab::Slab;
use spin::{Lazy, Mutex}; use spin::{Lazy, Mutex};
@ -147,22 +148,31 @@ impl Tasking {
PageTableFlags::USER_ACCESSIBLE, PageTableFlags::USER_ACCESSIBLE,
)?; )?;
let arguments = arguments.iter().map(|arg| (*arg).to_owned()).collect::<Vec<CString>>(); let arguments = arguments.iter().map(|arg| (*arg).to_owned()).collect::<Vec<CString>>();
#[expect(clippy::unwrap_used, reason = "This fails if the byte size of the array exceeds isize::MAX, which with 48-bit virtual addresses cannot happen")] #[expect(
clippy::unwrap_used,
reason = "This fails if the byte size of the array exceeds isize::MAX, which with 48-bit virtual addresses cannot happen"
)]
let mut args_layout = Layout::array::<*const u8>(arguments.len()).unwrap(); let mut args_layout = Layout::array::<*const u8>(arguments.len()).unwrap();
let mut arg_offsets = Vec::new(); let mut arg_offsets = Vec::new();
for argument in &arguments { for argument in &arguments {
#[expect(clippy::unwrap_used, reason = "This fails if the total size of the layout exceeds isize::MAX, which with 48-bit virtual addresses cannot happen")] #[expect(
clippy::unwrap_used,
reason = "This fails if the total size of the layout exceeds isize::MAX, which with 48-bit virtual addresses cannot happen"
)]
let (new_layout, offset) = let (new_layout, offset) =
args_layout.extend(Layout::for_value(argument.to_bytes_with_nul())).unwrap(); args_layout.extend(Layout::for_value(argument.to_bytes_with_nul())).unwrap();
args_layout = new_layout; args_layout = new_layout;
arg_offsets.push(offset); arg_offsets.push(offset);
} }
args_layout = { args_layout = {
#[expect(clippy::unwrap_used, reason = "This fails if the aligned size of the layout exceeds isize::MAX, which with 48-bit virtual addresses cannot happen")] #[expect(
clippy::unwrap_used,
reason = "This fails if the aligned size of the layout exceeds isize::MAX, which with 48-bit virtual addresses cannot happen"
)]
args_layout.align_to(4096).unwrap().pad_to_align() args_layout.align_to(4096).unwrap().pad_to_align()
}; };
let user_arg_mem = address_space let user_arg_mem =
.map_free(args_layout.size() / 4096, PageTableFlags::USER_ACCESSIBLE)?; address_space.map_free(args_layout.size() / 4096, PageTableFlags::USER_ACCESSIBLE)?;
address_space.run(|| unsafe { address_space.run(|| unsafe {
let mut ptr_ptr: *mut *const u8 = user_arg_mem.cast(); let mut ptr_ptr: *mut *const u8 = user_arg_mem.cast();
for (&offset, argument) in arg_offsets.iter().zip(arguments.iter()) { for (&offset, argument) in arg_offsets.iter().zip(arguments.iter()) {