Refactor project structure

This commit is contained in:
Zhang Junyang
2024-02-27 16:40:16 +08:00
committed by Tate, Hongliang Tian
parent bd878dd1c9
commit e3c227ae06
474 changed files with 77 additions and 77 deletions

View File

@ -0,0 +1,52 @@
// SPDX-License-Identifier: MPL-2.0
use super::{SyscallReturn, SYS_PIPE2};
use crate::{
fs::{
file_table::FileDescripter,
pipe::{PipeReader, PipeWriter},
utils::{Channel, StatusFlags},
},
log_syscall_entry,
prelude::*,
util::{read_val_from_user, write_val_to_user},
};
pub fn sys_pipe2(fds: Vaddr, flags: u32) -> Result<SyscallReturn> {
log_syscall_entry!(SYS_PIPE2);
debug!("flags: {:?}", flags);
let mut pipe_fds = read_val_from_user::<PipeFds>(fds)?;
let (reader, writer) = {
let (producer, consumer) = Channel::with_capacity_and_flags(
PIPE_BUF_SIZE,
StatusFlags::from_bits_truncate(flags),
)?
.split();
(PipeReader::new(consumer), PipeWriter::new(producer))
};
let pipe_reader = Arc::new(reader);
let pipe_writer = Arc::new(writer);
let current = current!();
let mut file_table = current.file_table().lock();
pipe_fds.reader_fd = file_table.insert(pipe_reader);
pipe_fds.writer_fd = file_table.insert(pipe_writer);
debug!("pipe_fds: {:?}", pipe_fds);
write_val_to_user(fds, &pipe_fds)?;
Ok(SyscallReturn::Return(0))
}
pub fn sys_pipe(fds: Vaddr) -> Result<SyscallReturn> {
self::sys_pipe2(fds, 0)
}
#[derive(Debug, Clone, Copy, Pod)]
#[repr(C)]
struct PipeFds {
reader_fd: FileDescripter,
writer_fd: FileDescripter,
}
const PIPE_BUF_SIZE: usize = 1024 * 1024;