summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMani Maghsoudlou <manidlou@gmail.com>2018-09-24 21:20:49 -0700
committerRyan Dahl <ry@tinyclouds.org>2018-09-25 00:20:49 -0400
commitad5065e23ec33af1422eeffdbb877ef8fd5f6da4 (patch)
tree5b90e2c1e59ad97ef0aa3f93868f80c90b8a365b /src
parentd957f8ebc24bcbdb94c0c5297c0072aa8d2ebec8 (diff)
Implement deno.readlink() (#797)
Diffstat (limited to 'src')
-rw-r--r--src/handlers.rs29
-rw-r--r--src/msg.fbs10
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;