diff --git a/vendor/smb-server/src/fs/local.rs b/vendor/smb-server/src/fs/local.rs index b9851f9..051291c 100644 --- a/vendor/smb-server/src/fs/local.rs +++ b/vendor/smb-server/src/fs/local.rs @@ -435,9 +435,15 @@ impl ShareBackend for LocalFsBackend { let xattr_name = name.to_string(); spawn_blocking(move || { - let full_path = root.join(&rel); - xattr::get(full_path.as_std_path(), &xattr_name) - .map_err(|e| SmbError::Io(e.into())) + // Get absolute path using as_std_path() + let full_path = root.as_std_path().join(&rel); + + // Use xattr::get which returns Option> + match xattr::get(&full_path, &xattr_name) { + Ok(Some(data)) => Ok(data), + Ok(None) => Err(SmbError::NotFound), + Err(e) => Err(SmbError::Io(e.into())), + } }) .await .map_err(join_to_io)? @@ -454,8 +460,8 @@ impl ShareBackend for LocalFsBackend { let value = value.to_vec(); spawn_blocking(move || { - let full_path = root.join(&rel); - xattr::set(full_path.as_std_path(), &xattr_name, &value) + let full_path = root.as_std_path().join(&rel); + xattr::set(&full_path, &xattr_name, &value) .map_err(|e| SmbError::Io(e.into())) }) .await @@ -472,8 +478,8 @@ impl ShareBackend for LocalFsBackend { let xattr_name = name.to_string(); spawn_blocking(move || { - let full_path = root.join(&rel); - xattr::remove(full_path.as_std_path(), &xattr_name) + let full_path = root.as_std_path().join(&rel); + xattr::remove(&full_path, &xattr_name) .map_err(|e| SmbError::Io(e.into())) }) .await @@ -485,10 +491,16 @@ impl ShareBackend for LocalFsBackend { let root = Arc::clone(&self.root); spawn_blocking(move || { - let full_path = root.join(&rel); - xattr::list(full_path.as_std_path()) - .map(|attrs| attrs.into_iter().map(|s| s.to_string()).collect()) - .map_err(|e| SmbError::Io(e.into())) + let full_path = root.as_std_path().join(&rel); + + // xattr::list returns iterator of OsString + let attrs: Vec = xattr::list(&full_path) + .map_err(|e| SmbError::Io(e.into()))? + .into_iter() + .filter_map(|s| s.into_string().ok()) + .collect(); + + Ok(attrs) }) .await .map_err(join_to_io)?