Move some syscall specific structs from fs to syscall module

This commit is contained in:
LI Qing
2023-05-04 15:37:55 +08:00
committed by Tate, Hongliang Tian
parent 6cea03b871
commit a2acf56765
6 changed files with 39 additions and 43 deletions

View File

@ -45,28 +45,3 @@ impl EpollEvent {
Self { events, user_data }
}
}
impl From<&c_epoll_event> for EpollEvent {
fn from(c_event: &c_epoll_event) -> Self {
Self {
events: IoEvents::from_bits_truncate(c_event.events as u32),
user_data: c_event.data,
}
}
}
impl From<&EpollEvent> for c_epoll_event {
fn from(ep_event: &EpollEvent) -> Self {
Self {
events: ep_event.events.bits() as u32,
data: ep_event.user_data,
}
}
}
#[derive(Debug, Clone, Copy, Pod)]
#[repr(C)]
pub struct c_epoll_event {
pub events: u32,
pub data: u64,
}

View File

@ -1,11 +0,0 @@
use crate::prelude::*;
#[repr(i32)]
#[derive(Debug, Clone, Copy, TryFromInt)]
#[allow(non_camel_case_types)]
pub enum FcntlCmd {
F_DUPFD = 0,
F_GETFD = 1,
F_SETFD = 2,
F_DUPFD_CLOEXEC = 1030,
}

View File

@ -6,7 +6,6 @@ pub use creation_flags::CreationFlags;
pub use dentry_cache::Dentry;
pub use dirent_visitor::DirentVisitor;
pub use direntry_vec::DirEntryVecExt;
pub use fcntl::FcntlCmd;
pub use file_creation_mask::FileCreationMask;
pub use fs::{FileSystem, FsFlags, SuperBlock};
pub use inode::{Inode, InodeMode, InodeType, Metadata};
@ -23,7 +22,6 @@ mod creation_flags;
mod dentry_cache;
mod dirent_visitor;
mod direntry_vec;
mod fcntl;
mod file_creation_mask;
mod fs;
mod inode;

View File

@ -1,8 +1,8 @@
use core::time::Duration;
use crate::fs::epoll::{c_epoll_event, EpollCtl, EpollEvent, EpollFile, EpollFlags};
use crate::fs::epoll::{EpollCtl, EpollEvent, EpollFile, EpollFlags};
use crate::fs::file_table::FileDescripter;
use crate::fs::utils::CreationFlags;
use crate::fs::utils::{CreationFlags, IoEvents};
use crate::log_syscall_entry;
use crate::prelude::*;
use crate::util::{read_val_from_user, write_val_to_user};
@ -131,3 +131,28 @@ pub fn sys_epoll_wait(
Ok(SyscallReturn::Return(epoll_events.len() as _))
}
#[derive(Debug, Clone, Copy, Pod)]
#[repr(C)]
struct c_epoll_event {
events: u32,
data: u64,
}
impl From<&EpollEvent> for c_epoll_event {
fn from(ep_event: &EpollEvent) -> Self {
Self {
events: ep_event.events.bits() as u32,
data: ep_event.user_data,
}
}
}
impl From<&c_epoll_event> for EpollEvent {
fn from(c_event: &c_epoll_event) -> Self {
Self::new(
IoEvents::from_bits_truncate(c_event.events as u32),
c_event.data,
)
}
}

View File

@ -1,5 +1,4 @@
use super::{SyscallReturn, SYS_FCNTL};
use crate::fs::utils::FcntlCmd;
use crate::log_syscall_entry;
use crate::{fs::file_table::FileDescripter, prelude::*};
@ -25,3 +24,13 @@ pub fn sys_fcntl(fd: FileDescripter, cmd: i32, arg: u64) -> Result<SyscallReturn
_ => todo!(),
}
}
#[repr(i32)]
#[derive(Debug, Clone, Copy, TryFromInt)]
#[allow(non_camel_case_types)]
enum FcntlCmd {
F_DUPFD = 0,
F_GETFD = 1,
F_SETFD = 2,
F_DUPFD_CLOEXEC = 1030,
}

View File

@ -99,14 +99,14 @@ fn do_poll(poll_fds: &[PollFd], timeout: Option<Duration>) -> Result<usize> {
// https://github.com/torvalds/linux/blob/master/include/uapi/asm-generic/poll.h
#[derive(Debug, Clone, Copy, Pod)]
#[repr(C)]
pub struct c_pollfd {
struct c_pollfd {
fd: i32,
events: i16,
revents: i16,
}
#[derive(Debug, Clone)]
pub struct PollFd {
struct PollFd {
fd: Option<FileDescripter>,
events: IoEvents,
revents: Cell<IoEvents>,