From 53d62dc0a901da67252c1855419c7abcd9a614d0 Mon Sep 17 00:00:00 2001 From: Begild Date: Tue, 16 Jul 2024 08:00:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0rename=E7=9A=84support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- proto/lws.proto | 17 ++++++++++++----- src/fs_impl/mod.rs | 5 +++++ src/lib.rs | 20 +++++++++++++++++++- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/proto/lws.proto b/proto/lws.proto index 20f10b3..ef8942b 100644 --- a/proto/lws.proto +++ b/proto/lws.proto @@ -37,8 +37,9 @@ service LwsVfs { rpc fflush(flush) returns (flush) {} rpc fopendir(opendir) returns (opendir) {} rpc freleasedir(releasedir) returns (releasedir) {} - rpc fcreate (create) returns (create) {} + rpc fcreate(create) returns (create) {} rpc funlink(unlink) returns (unlink) {} + rpc frename(rename) returns (rename) {} } // The request message containing the user's name. @@ -179,26 +180,32 @@ message flush { int32 ret = 15; } -message opendir{ +message opendir { string path = 1; file_info fi = 2; int32 ret = 15; } -message releasedir{ +message releasedir { string path = 1; file_info fi = 2; int32 ret = 15; } -message create{ +message create { string path = 1; uint32 mode = 2; file_info fi = 3; int32 ret = 15; } -message unlink{ +message unlink { string path = 1; int32 ret = 15; +} + +message rename { + string path = 1; + string new = 2; + int32 ret = 15; } \ No newline at end of file diff --git a/src/fs_impl/mod.rs b/src/fs_impl/mod.rs index b0c177d..3d3c125 100755 --- a/src/fs_impl/mod.rs +++ b/src/fs_impl/mod.rs @@ -420,6 +420,11 @@ impl FSImpl { Ok(-1) } } + /** Rename a file */ + pub fn frename(&self, path: &String, new: &String) -> Result> { + fs::rename(path, new)?; + Ok(0) + } } #[test] diff --git a/src/lib.rs b/src/lib.rs index 39c6823..09f00a4 100755 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,7 +2,7 @@ use lws_vfs::lws_vfs_server::LwsVfs; use lws_vfs::{ Access, Chown, FileInfo, Flush, Fstat, Getattr, Getxattr, HelloReply, HelloRequest, Mkdir, - Open, Read, Readdir, Release, Rmdir, Setxattr, Truncate, Utimens, Write, Create, Unlink, Opendir, Releasedir + Open, Read, Readdir, Release, Rmdir, Setxattr, Truncate, Utimens, Write, Create, Unlink, Opendir, Releasedir, Rename }; use self::fs_impl::FSImpl; use serde_json::{self, Value}; @@ -482,4 +482,22 @@ impl LwsVfs for LwsVfsIns { }; Ok(Response::new(reply)) } + + async fn frename(&self, request: Request) -> Result, Status> { + let request = request.into_inner(); + let from = &self.lpath(&request.path); + let to = &self.lpath(&request.new); + let ret = match self.fs.frename(from, to) { + Ok(ret) => ret, + Err(e) => { + println!("Error: rename file[{}]: {:?}", from, e); + -1 + } + }; + let reply = Rename { + ret, + ..Rename::default() + }; + Ok(Response::new(reply)) + } }