Rename struct Path to struct DentryMnt

Signed-off-by: Zhenchen Wang <m202372036@hust.edu.cn>
This commit is contained in:
plucky
2024-04-15 20:08:04 +08:00
committed by Tate, Hongliang Tian
parent 6d486c6c01
commit 60fa4d104a
35 changed files with 250 additions and 237 deletions

View File

@ -1,6 +1,6 @@
// SPDX-License-Identifier: MPL-2.0
use crate::{fs::utils::Path, net::socket::util::socket_addr::SocketAddr, prelude::*};
use crate::{fs::utils::DentryMnt, net::socket::util::socket_addr::SocketAddr, prelude::*};
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum UnixSocketAddr {
@ -10,7 +10,7 @@ pub enum UnixSocketAddr {
#[derive(Clone)]
pub(super) enum UnixSocketAddrBound {
Path(Arc<Path>),
Path(Arc<DentryMnt>),
Abstract(String),
}
@ -40,8 +40,8 @@ impl TryFrom<SocketAddr> for UnixSocketAddr {
impl From<UnixSocketAddrBound> for UnixSocketAddr {
fn from(value: UnixSocketAddrBound) -> Self {
match value {
UnixSocketAddrBound::Path(path) => {
let abs_path = path.abs_path();
UnixSocketAddrBound::Path(dentrymnt) => {
let abs_path = dentrymnt.abs_path();
Self::Path(abs_path)
}
UnixSocketAddrBound::Abstract(name) => Self::Abstract(name),

View File

@ -7,7 +7,7 @@ use crate::{
events::IoEvents,
fs::{
fs_resolver::{split_path, FsPath},
utils::{InodeMode, InodeType, Path},
utils::{DentryMnt, InodeMode, InodeType},
},
net::socket::unix::addr::{UnixSocketAddr, UnixSocketAddrBound},
prelude::*,
@ -38,8 +38,8 @@ impl Init {
let bound_addr = match addr_to_bind {
UnixSocketAddr::Abstract(_) => todo!(),
UnixSocketAddr::Path(pathname) => {
let path = create_socket_file(pathname)?;
UnixSocketAddrBound::Path(path)
let dentrymnt = create_socket_file(pathname)?;
UnixSocketAddrBound::Path(dentrymnt)
}
};
@ -87,7 +87,7 @@ impl Init {
}
}
fn create_socket_file(pathname: &str) -> Result<Arc<Path>> {
fn create_socket_file(pathname: &str) -> Result<Arc<DentryMnt>> {
let (parent_pathname, file_name) = split_path(pathname);
let parent = {
let current = current!();
@ -100,6 +100,6 @@ fn create_socket_file(pathname: &str) -> Result<Arc<Path>> {
InodeType::Socket,
InodeMode::S_IRUSR | InodeMode::S_IWUSR,
)?;
let path = Path::new(parent.mount_node().clone(), dentry.clone());
Ok(path)
let dentrymnt = DentryMnt::new(parent.mount_node().clone(), dentry.clone());
Ok(dentrymnt)
}

View File

@ -9,7 +9,7 @@ use crate::{
events::IoEvents,
fs::{
file_handle::FileLike,
utils::{Inode, Path},
utils::{DentryMnt, Inode},
},
net::socket::{
unix::addr::{UnixSocketAddr, UnixSocketAddrBound},
@ -91,10 +91,10 @@ impl BacklogTable {
fn add_backlog(&self, addr: &UnixSocketAddrBound, backlog: usize) -> Result<()> {
let inode = {
let UnixSocketAddrBound::Path(path) = addr else {
let UnixSocketAddrBound::Path(dentrymnt) = addr else {
todo!()
};
create_keyable_inode(path)
create_keyable_inode(dentrymnt)
};
let mut backlog_sockets = self.backlog_sockets.write();
@ -108,10 +108,10 @@ impl BacklogTable {
fn get_backlog(&self, addr: &UnixSocketAddrBound) -> Result<Arc<Backlog>> {
let inode = {
let UnixSocketAddrBound::Path(path) = addr else {
let UnixSocketAddrBound::Path(dentrymnt) = addr else {
todo!()
};
create_keyable_inode(path)
create_keyable_inode(dentrymnt)
};
let backlog_sockets = self.backlog_sockets.read();
@ -162,11 +162,11 @@ impl BacklogTable {
}
fn remove_backlog(&self, addr: &UnixSocketAddrBound) {
let UnixSocketAddrBound::Path(dentry) = addr else {
let UnixSocketAddrBound::Path(dentrymnt) = addr else {
todo!()
};
let inode = create_keyable_inode(dentry);
let inode = create_keyable_inode(dentrymnt);
self.backlog_sockets.write().remove(&inode);
}
}
@ -212,8 +212,8 @@ impl Backlog {
}
}
fn create_keyable_inode(path: &Arc<Path>) -> KeyableWeak<dyn Inode> {
let weak_inode = Arc::downgrade(path.dentry().inode());
fn create_keyable_inode(dentrymnt: &Arc<DentryMnt>) -> KeyableWeak<dyn Inode> {
let weak_inode = Arc::downgrade(dentrymnt.dentry().inode());
KeyableWeak::from(weak_inode)
}

View File

@ -11,7 +11,7 @@ use crate::{
fs::{
file_handle::FileLike,
fs_resolver::FsPath,
utils::{InodeType, Path, StatusFlags},
utils::{DentryMnt, InodeType, StatusFlags},
},
net::socket::{
unix::{addr::UnixSocketAddrBound, UnixSocketAddr},
@ -162,8 +162,8 @@ impl Socket for UnixStreamSocket {
UnixSocketAddrBound::Abstract(abstract_name)
}
UnixSocketAddr::Path(pathname) => {
let path = lookup_socket_file(&pathname)?;
UnixSocketAddrBound::Path(path)
let dentrymnt = lookup_socket_file(&pathname)?;
UnixSocketAddrBound::Path(dentrymnt)
}
}
};
@ -287,20 +287,20 @@ impl Drop for UnixStreamSocket {
}
}
fn lookup_socket_file(pathname: &str) -> Result<Arc<Path>> {
let path = {
fn lookup_socket_file(pathname: &str) -> Result<Arc<DentryMnt>> {
let dentrymnt = {
let current = current!();
let fs = current.fs().read();
let fs_path = FsPath::try_from(pathname)?;
fs.lookup(&fs_path)?
};
if path.dentry().type_() != InodeType::Socket {
if dentrymnt.dentry().type_() != InodeType::Socket {
return_errno_with_message!(Errno::ENOTSOCK, "not a socket file")
}
if !path.dentry().mode()?.is_readable() || !path.dentry().mode()?.is_writable() {
if !dentrymnt.dentry().mode()?.is_readable() || !dentrymnt.dentry().mode()?.is_writable() {
return_errno_with_message!(Errno::EACCES, "the socket cannot be read or written")
}
Ok(path)
Ok(dentrymnt)
}