mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-30 00:23:24 +00:00
Rename struct Path to struct DentryMnt
Signed-off-by: Zhenchen Wang <m202372036@hust.edu.cn>
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
6d486c6c01
commit
60fa4d104a
@ -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),
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
|
Reference in New Issue
Block a user