Add write support

This commit is contained in:
pjht 2025-03-07 11:34:56 -06:00
parent cf389c13d0
commit 8dc225dfb0
Signed by: pjht
GPG Key ID: CA239FC6934E6F3A
2 changed files with 16 additions and 7 deletions

10
Cargo.lock generated
View File

@ -321,18 +321,18 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
[[package]]
name = "serde"
version = "1.0.210"
version = "1.0.218"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.210"
version = "1.0.218"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn 2.0.87",
]
[[package]]
@ -387,9 +387,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.79"
version = "2.0.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590"
checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"
dependencies = [
"proc-macro2",
"quote",

View File

@ -80,8 +80,17 @@ impl file_rpc::Server for Serv {
.into())
}
fn write(&self, _fd: u64, _data: &[u8]) -> Result<(), Errno> {
todo!()
fn write(&self, fd: u64, data: &[u8]) -> Result<(), Errno> {
let file = &*self.open_files.get(fd as usize).ok_or(Errno::EBADF)?;
if file.pos.load(Ordering::Relaxed).saturating_add(data.len() as u64) > file.part_len as u64 {
return Err(Errno::EINVAL);
}
let file_client = file_rpc::Client::new(file.drive_file.0);
file_client.seek(file.drive_file.1, file_rpc::SeekFrom::Start(file.offset + file.pos.load(Ordering::Relaxed)))?;
Ok(file_client
.write(file.drive_file.1, &data)?
.into())
}
fn close(&self, _fd: u64) -> Result<(), Errno> { Ok(()) }