diff options
Diffstat (limited to 'src/handlers.rs')
-rw-r--r-- | src/handlers.rs | 23 |
1 files changed, 23 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()) +} |