From eeee40ae0c2046761ef3ebde09208e9511f58d55 Mon Sep 17 00:00:00 2001 From: Ron Williams Date: Thu, 1 Feb 2024 00:50:33 -0800 Subject: [PATCH] update unlink for new path format --- src/syscall/fs.rs | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/src/syscall/fs.rs b/src/syscall/fs.rs index 3f45072630..6dd8b55da0 100644 --- a/src/syscall/fs.rs +++ b/src/syscall/fs.rs @@ -126,20 +126,18 @@ pub fn rmdir(raw_path: UserSliceRo) -> Result<()> { let mut path_buf = BorrowedHtBuf::head()?; let path = path_buf.use_for_string(raw_path)?; */ - let path = copy_path_to_buf(raw_path, PATH_MAX)?; - - let mut parts = path.splitn(2, ':'); - let scheme_name = parts.next().ok_or(Error::new(EINVAL))?; - let reference = parts.next().unwrap_or(""); + let path_buf = copy_path_to_buf(raw_path, PATH_MAX)?; + let path = RedoxPath::from_absolute(&path_buf).ok_or(Error::new(EINVAL))?; + let (scheme_name, reference) = path.as_parts(); let scheme = { let schemes = scheme::schemes(); let (_scheme_id, scheme) = schemes - .get_name(scheme_ns, scheme_name) + .get_name(scheme_ns, scheme_name.as_ref()) .ok_or(Error::new(ENODEV))?; scheme.clone() }; - scheme.rmdir(reference, caller_ctx) + scheme.rmdir(reference.as_ref(), caller_ctx) } /// Unlink syscall @@ -151,20 +149,18 @@ pub fn unlink(raw_path: UserSliceRo) -> Result<()> { let mut path_buf = BorrowedHtBuf::head()?; let path = path_buf.use_for_string(raw_path)?; */ - let path = copy_path_to_buf(raw_path, PATH_MAX)?; - - let mut parts = path.splitn(2, ':'); - let scheme_name = parts.next().ok_or(Error::new(EINVAL))?; - let reference = parts.next().unwrap_or(""); + let path_buf = copy_path_to_buf(raw_path, PATH_MAX)?; + let path = RedoxPath::from_absolute(&path_buf).ok_or(Error::new(EINVAL))?; + let (scheme_name, reference) = path.as_parts(); let scheme = { let schemes = scheme::schemes(); let (_scheme_id, scheme) = schemes - .get_name(scheme_ns, scheme_name) + .get_name(scheme_ns, scheme_name.as_ref()) .ok_or(Error::new(ENODEV))?; scheme.clone() }; - scheme.unlink(reference, caller_ctx) + scheme.unlink(reference.as_ref(), caller_ctx) } /// Close syscall @@ -380,16 +376,14 @@ pub fn frename(fd: FileHandle, raw_path: UserSliceRo) -> Result<()> { let mut path_buf = BorrowedHtBuf::head()?; let path = path_buf.use_for_string(raw_path)?; */ - let path = copy_path_to_buf(raw_path, PATH_MAX)?; - - let mut parts = path.splitn(2, ':'); - let scheme_name = parts.next().ok_or(Error::new(ENOENT))?; - let reference = parts.next().unwrap_or(""); + let path_buf = copy_path_to_buf(raw_path, PATH_MAX)?; + let path = RedoxPath::from_absolute(&path_buf).ok_or(Error::new(EINVAL))?; + let (scheme_name, reference) = path.as_parts(); let (scheme_id, scheme) = { let schemes = scheme::schemes(); let (scheme_id, scheme) = schemes - .get_name(scheme_ns, scheme_name) + .get_name(scheme_ns, scheme_name.as_ref()) .ok_or(Error::new(ENODEV))?; (scheme_id, scheme.clone()) }; @@ -400,7 +394,7 @@ pub fn frename(fd: FileHandle, raw_path: UserSliceRo) -> Result<()> { return Err(Error::new(EXDEV)); } - scheme.frename(description.number, reference, caller_ctx) + scheme.frename(description.number, reference.as_ref(), caller_ctx) } /// File status