summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/handlers.rs25
-rw-r--r--src/msg.fbs7
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;
}