summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMani Maghsoudlou <manidlou@gmail.com>2018-09-03 17:22:30 -0700
committerRyan Dahl <ry@tinyclouds.org>2018-09-04 11:57:04 -0400
commit641e3d404dfeb8f70ae0eb6c59b898b9f44742a1 (patch)
tree7611e133745846dbef3cd11437bad5d3f06a7e52 /src
parentb2b4299e3b499c50bd11059854e3dcb4df2e2891 (diff)
Implement renameSync
Diffstat (limited to 'src')
-rw-r--r--src/handlers.rs23
-rw-r--r--src/msg.fbs6
2 files changed, 29 insertions, 0 deletions
diff --git a/src/handlers.rs b/src/handlers.rs
index df77df26a..fe82c1c03 100644
--- a/src/handlers.rs
+++ b/src/handlers.rs
@@ -40,6 +40,7 @@ pub extern "C" fn msg_from_js(d: *const DenoC, buf: deno_buf) {
msg::Any::MakeTempDir => handle_make_temp_dir,
msg::Any::MkdirSync => handle_mkdir_sync,
msg::Any::ReadFileSync => handle_read_file_sync,
+ msg::Any::RenameSync => handle_rename_sync,
msg::Any::SetEnv => handle_set_env,
msg::Any::StatSync => handle_stat_sync,
msg::Any::WriteFileSync => handle_write_file_sync,
@@ -673,3 +674,25 @@ fn handle_timer_clear(
remove_timer(d, msg.id());
Ok(null_buf())
}
+
+fn handle_rename_sync(
+ d: *const DenoC,
+ base: msg::Base,
+ _builder: &mut FlatBufferBuilder,
+) -> HandlerResult {
+ let msg = base.msg_as_rename_sync().unwrap();
+ let oldpath = msg.oldpath().unwrap();
+ let newpath = msg.newpath().unwrap();
+ let deno = from_c(d);
+
+ debug!("handle_rename_sync {} {}", oldpath, newpath);
+ if !deno.flags.allow_write {
+ let err = std::io::Error::new(
+ std::io::ErrorKind::PermissionDenied,
+ "allow_write is off.",
+ );
+ return Err(err.into());
+ }
+ fs::rename(Path::new(oldpath), Path::new(newpath))?;
+ Ok(null_buf())
+}
diff --git a/src/msg.fbs b/src/msg.fbs
index ebb4077f7..be9b07af7 100644
--- a/src/msg.fbs
+++ b/src/msg.fbs
@@ -19,6 +19,7 @@ union Any {
MkdirSync,
ReadFileSync,
ReadFileSyncRes,
+ RenameSync,
StatSync,
StatSyncRes,
SetEnv,
@@ -181,6 +182,11 @@ table ReadFileSyncRes {
data: [ubyte];
}
+table RenameSync {
+ oldpath: string;
+ newpath: string;
+}
+
table StatSync {
filename: string;
lstat: bool;