diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/handlers.rs | 25 | ||||
-rw-r--r-- | src/msg.fbs | 7 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/handlers.rs b/src/handlers.rs index f583f2400..df77df26a 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -38,6 +38,7 @@ pub extern "C" fn msg_from_js(d: *const DenoC, buf: deno_buf) { msg::Any::TimerStart => handle_timer_start, msg::Any::TimerClear => handle_timer_clear, msg::Any::MakeTempDir => handle_make_temp_dir, + msg::Any::MkdirSync => handle_mkdir_sync, msg::Any::ReadFileSync => handle_read_file_sync, msg::Any::SetEnv => handle_set_env, msg::Any::StatSync => handle_stat_sync, @@ -488,6 +489,30 @@ fn handle_make_temp_dir( )) } +fn handle_mkdir_sync( + d: *const DenoC, + base: msg::Base, + _builder: &mut FlatBufferBuilder, +) -> HandlerResult { + let msg = base.msg_as_mkdir_sync().unwrap(); + let path = msg.path().unwrap(); + // TODO let mode = msg.mode(); + let deno = from_c(d); + + debug!("handle_mkdir_sync {}", path); + if deno.flags.allow_write { + // TODO(ry) Use mode. + deno_fs::mkdir(Path::new(path))?; + Ok(null_buf()) + } else { + let err = std::io::Error::new( + std::io::ErrorKind::PermissionDenied, + "allow_write is off.", + ); + Err(err.into()) + } +} + // Prototype https://github.com/denoland/deno/blob/golang/os.go#L171-L184 fn handle_read_file_sync( _d: *const DenoC, diff --git a/src/msg.fbs b/src/msg.fbs index ca2e16af7..ebb4077f7 100644 --- a/src/msg.fbs +++ b/src/msg.fbs @@ -16,6 +16,7 @@ union Any { FetchRes, MakeTempDir, MakeTempDirRes, + MkdirSync, ReadFileSync, ReadFileSyncRes, StatSync, @@ -166,6 +167,12 @@ table MakeTempDirRes { path: string; } +table MkdirSync { + path: string; + mode: uint; + // mode specified by https://godoc.org/os#FileMode +} + table ReadFileSync { filename: string; } |