diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/handlers.rs | 29 | ||||
-rw-r--r-- | src/msg.fbs | 10 |
2 files changed, 39 insertions, 0 deletions
diff --git a/src/handlers.rs b/src/handlers.rs index eef091174..964baabf8 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -56,6 +56,7 @@ pub extern "C" fn msg_from_js(i: *const isolate, buf: deno_buf) { msg::Any::Remove => handle_remove, msg::Any::ReadFile => handle_read_file, msg::Any::Rename => handle_rename, + msg::Any::Readlink => handle_read_link, msg::Any::Symlink => handle_symlink, msg::Any::SetEnv => handle_set_env, msg::Any::Stat => handle_stat, @@ -702,3 +703,31 @@ fn handle_symlink(i: *const isolate, base: &msg::Base) -> Box<Op> { }())) } } + +fn handle_read_link(_i: *const isolate, base: &msg::Base) -> Box<Op> { + let msg = base.msg_as_readlink().unwrap(); + let cmd_id = base.cmd_id(); + let name = String::from(msg.name().unwrap()); + Box::new(futures::future::result(|| -> OpResult { + debug!("handle_read_link {}", name); + let path = fs::read_link(Path::new(&name))?; + let builder = &mut FlatBufferBuilder::new(); + let path_off = builder.create_string(path.to_str().unwrap()); + let msg = msg::ReadlinkRes::create( + builder, + &msg::ReadlinkResArgs { + path: Some(path_off), + ..Default::default() + }, + ); + Ok(serialize_response( + cmd_id, + builder, + msg::BaseArgs { + msg: Some(msg.as_union_value()), + msg_type: msg::Any::ReadlinkRes, + ..Default::default() + }, + )) + }())) +} diff --git a/src/msg.fbs b/src/msg.fbs index ee3930729..6358668b7 100644 --- a/src/msg.fbs +++ b/src/msg.fbs @@ -20,6 +20,8 @@ union Any { ReadFileRes, WriteFile, Rename, + Readlink, + ReadlinkRes, Symlink, Stat, StatRes, @@ -202,6 +204,14 @@ table Rename { newpath: string; } +table Readlink { + name: string; +} + +table ReadlinkRes { + path: string; +} + table Symlink { oldname: string; newname: string; |