1. 添加处理rpc返回值的宏,将其转化为Result类型方便处理,将rpc过来ret值如实返还给sys

This commit is contained in:
Ekko.bao 2024-12-05 08:21:08 +08:00
parent b60feeb7ed
commit 94c9751c00

View File

@ -7,10 +7,9 @@ use lws_client::{
use serde_json::{self, Value}; use serde_json::{self, Value};
use std::error::Error; use std::error::Error;
use std::ffi::OsStr; use std::ffi::OsStr;
use std::fs::File;
use std::io::{Error as IoError, ErrorKind, Read as IoRead}; use std::io::{Error as IoError, ErrorKind, Read as IoRead};
use std::thread::{self, JoinHandle}; use std::thread::{self};
use std::{env, path, vec}; use std::{env, vec};
use tokio::runtime::{Builder, Runtime}; use tokio::runtime::{Builder, Runtime};
use tonic::transport::Channel as RpcChannel; use tonic::transport::Channel as RpcChannel;
extern crate log; extern crate log;
@ -432,6 +431,14 @@ pub struct LwsVfsIns {
cache: FileAttrCacheManager, cache: FileAttrCacheManager,
} }
macro_rules! ret2result {
($ret:expr) => {
match $ret {
0 => Ok(()),
_ => Err($ret),
}
};
}
fn mode_to_filetype(mode: libc::mode_t) -> FileType { fn mode_to_filetype(mode: libc::mode_t) -> FileType {
match mode & libc::S_IFMT { match mode & libc::S_IFMT {
libc::S_IFDIR => FileType::Directory, libc::S_IFDIR => FileType::Directory,
@ -541,8 +548,8 @@ impl FilesystemMT for LwsVfsIns {
}; };
log::trace!("get resp: {:?}", resp); log::trace!("get resp: {:?}", resp);
if resp.ret != 0 { if resp.ret != 0 {
self.cache.set(&path, Err(libc::ENOENT)); self.cache.set(&path, Err(resp.ret));
return Err(libc::ENOENT); return Err(resp.ret);
} }
let attr = file_attr(&resp.stat.unwrap(), &req); let attr = file_attr(&resp.stat.unwrap(), &req);
self.cache.set(&path, Ok(attr.clone())); self.cache.set(&path, Ok(attr.clone()));
@ -606,10 +613,7 @@ impl FilesystemMT for LwsVfsIns {
} }
}; };
log::trace!("get resp: {:?}", resp); log::trace!("get resp: {:?}", resp);
if resp.ret != 0 { ret2result!(resp.ret)
return Err(libc::ENOMSG);
}
Ok(())
} }
/// Set timestamps of a filesystem entry. /// Set timestamps of a filesystem entry.
@ -666,10 +670,7 @@ impl FilesystemMT for LwsVfsIns {
} }
}; };
log::trace!("get resp: {:?}", resp); log::trace!("get resp: {:?}", resp);
if resp.ret != 0 { ret2result!(resp.ret)
return Err(libc::ENOMSG);
}
Ok(())
} }
// END OF SETATTR FUNCTIONS // END OF SETATTR FUNCTIONS
@ -732,7 +733,7 @@ impl FilesystemMT for LwsVfsIns {
}; };
log::trace!("get resp: {:?}", resp); log::trace!("get resp: {:?}", resp);
if resp.ret != 0 { if resp.ret != 0 {
return Err(libc::ENOMSG); return Err(resp.ret)
} }
self.getattr(req, Path::new(&path), None) self.getattr(req, Path::new(&path), None)
} }
@ -768,10 +769,7 @@ impl FilesystemMT for LwsVfsIns {
}; };
self.cache.clr(vec![path]); self.cache.clr(vec![path]);
log::trace!("get resp: {:?}", resp); log::trace!("get resp: {:?}", resp);
if resp.ret != 0 { ret2result!(resp.ret)
return Err(libc::ENOMSG);
}
Ok(())
} }
/// Remove a directory. /// Remove a directory.
@ -807,10 +805,7 @@ impl FilesystemMT for LwsVfsIns {
} }
}; };
log::trace!("get resp: {:?}", resp); log::trace!("get resp: {:?}", resp);
if resp.ret != 0 { ret2result!(resp.ret)
return Err(libc::ENOMSG);
}
Ok(())
} }
/// Create a symbolic link. /// Create a symbolic link.
@ -870,10 +865,7 @@ impl FilesystemMT for LwsVfsIns {
} }
}; };
log::trace!("get resp: {:?}", resp); log::trace!("get resp: {:?}", resp);
if resp.ret != 0 { ret2result!(resp.ret)
return Err(libc::ENOMSG);
}
Ok(())
} }
/// Create a hard link. /// Create a hard link.
@ -929,7 +921,7 @@ impl FilesystemMT for LwsVfsIns {
}; };
log::trace!("get resp: {:?}", resp); log::trace!("get resp: {:?}", resp);
if resp.ret != 0 { if resp.ret != 0 {
return Err(libc::ENOMSG); return Err(resp.ret)
} }
let fi = resp.fi.unwrap(); let fi = resp.fi.unwrap();
Ok((fi.fh, fi.flags)) Ok((fi.fh, fi.flags))
@ -989,7 +981,7 @@ impl FilesystemMT for LwsVfsIns {
}; };
log::trace!("get fread resp size is: {}", resp.size); log::trace!("get fread resp size is: {}", resp.size);
if resp.ret != 0 { if resp.ret != 0 {
return callback(Err(libc::ENOMSG)); return callback(Err(resp.ret));
} }
callback(Ok(&resp.buff)) callback(Ok(&resp.buff))
} }
@ -1044,7 +1036,7 @@ impl FilesystemMT for LwsVfsIns {
}; };
log::trace!("get resp: {:?}", resp); log::trace!("get resp: {:?}", resp);
if resp.ret != 0 { if resp.ret != 0 {
return Err(libc::ENOMSG); return Err(resp.ret)
} }
Ok(resp.size as u32) Ok(resp.size as u32)
} }
@ -1089,10 +1081,7 @@ impl FilesystemMT for LwsVfsIns {
} }
}; };
log::trace!("get resp: {:?}", resp); log::trace!("get resp: {:?}", resp);
if resp.ret != 0 { ret2result!(resp.ret)
return Err(libc::ENOMSG);
}
Ok(())
} }
/// Called when an open file is closed. /// Called when an open file is closed.
@ -1145,11 +1134,8 @@ impl FilesystemMT for LwsVfsIns {
} }
}; };
log::trace!("get resp: {:?}", resp); log::trace!("get resp: {:?}", resp);
if resp.ret != 0 { ret2result!(resp.ret)
return Err(libc::ENOMSG);
}
// self.cache.clr(vec![path]); // self.cache.clr(vec![path]);
Ok(())
} }
/// Write out any pending changes of a file. /// Write out any pending changes of a file.
@ -1203,7 +1189,7 @@ impl FilesystemMT for LwsVfsIns {
}; };
log::trace!("get resp: {:?}", resp); log::trace!("get resp: {:?}", resp);
if resp.ret != 0 { if resp.ret != 0 {
return Err(libc::ENOMSG); return Err(resp.ret);
} }
Ok((resp.fi.unwrap().fh, flags)) Ok((resp.fi.unwrap().fh, flags))
} }
@ -1268,7 +1254,7 @@ impl FilesystemMT for LwsVfsIns {
}; };
log::trace!("get resp: {:?}", resp); log::trace!("get resp: {:?}", resp);
if resp.ret != 0 { if resp.ret != 0 {
return Err(libc::ENOMSG); return Err(resp.ret)
} }
let mut dirs = vec![]; let mut dirs = vec![];
// let clrs: Vec<String> = resp.dirs.iter().map(|dir| dir.name.clone().into()).collect(); // let clrs: Vec<String> = resp.dirs.iter().map(|dir| dir.name.clone().into()).collect();
@ -1321,10 +1307,7 @@ impl FilesystemMT for LwsVfsIns {
} }
}; };
log::trace!("get resp: {:?}", resp); log::trace!("get resp: {:?}", resp);
if resp.ret != 0 { ret2result!(resp.ret)
return Err(libc::ENOMSG);
}
Ok(())
} }
/// Write out any pending changes to a directory. /// Write out any pending changes to a directory.
@ -1444,10 +1427,7 @@ impl FilesystemMT for LwsVfsIns {
} }
}; };
log::trace!("get resp: {:?}", resp); log::trace!("get resp: {:?}", resp);
if resp.ret != 0 { ret2result!(resp.ret)
return Err(libc::EACCES);
}
Ok(())
} }
/// Create and open a new file. /// Create and open a new file.
@ -1501,15 +1481,17 @@ impl FilesystemMT for LwsVfsIns {
} }
self.cache.clr(vec![path.to_string()]); self.cache.clr(vec![path.to_string()]);
let fi = resp.fi.unwrap(); let fi = resp.fi.unwrap();
if let Ok((ttl, attr)) = self.getattr(req, Path::new(&path), Some(fi.fh)) { match self.getattr(req, Path::new(&path), Some(fi.fh)) {
return Ok(CreatedEntry { Ok((ttl, attr)) => {
Ok(CreatedEntry {
fh: fi.fh, fh: fi.fh,
flags, flags,
attr, attr,
ttl, ttl,
}); })
},
Err(e) => Err(e),
} }
Err(libc::ENOMSG)
} }
} }
@ -1594,7 +1576,15 @@ impl LwsVfsIns {
where where
F: FilesystemMT + Sync + Send + 'static, F: FilesystemMT + Sync + Send + 'static,
{ {
let fuse_args = [OsStr::new("-o"), OsStr::new("fsname=lws_vfs")]; let user = match env::var("USER") {
Ok(user) => user,
Err(_) => {
log::warn!("Can not get user name, use 'unknown'");
"unknown".to_string()
},
};
let name = format!("fsname=lws_vfs@{}", user);
let fuse_args = [OsStr::new("-o"), OsStr::new(name.as_str())];
fuse_mt::mount( fuse_mt::mount(
fuse_mt::FuseMT::new(file_system, 10), fuse_mt::FuseMT::new(file_system, 10),
&mount_point, &mount_point,