diff options
Diffstat (limited to 'src/ops.rs')
-rw-r--r-- | src/ops.rs | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/src/ops.rs b/src/ops.rs index 6d41fbe63..3cf466d0d 100644 --- a/src/ops.rs +++ b/src/ops.rs @@ -584,9 +584,47 @@ fn op_open( let cmd_id = base.cmd_id(); let inner = base.inner_as_open().unwrap(); let filename = PathBuf::from(inner.filename().unwrap()); - // TODO let perm = inner.perm(); + // let perm = inner.perm(); + let mode = inner.mode().unwrap(); - let op = tokio::fs::File::open(filename) + let mut open_options = tokio::fs::OpenOptions::new(); + + match mode { + "r" => { + open_options.read(true); + } + "r+" => { + open_options.read(true).write(true); + } + "w" => { + open_options.create(true).write(true).truncate(true); + } + "w+" => { + open_options + .read(true) + .create(true) + .write(true) + .truncate(true); + } + "a" => { + open_options.create(true).append(true); + } + "a+" => { + open_options.read(true).create(true).append(true); + } + "x" => { + open_options.create_new(true).write(true); + } + "x+" => { + open_options.create_new(true).read(true).write(true); + } + &_ => { + panic!("Unknown file open mode."); + } + } + + let op = open_options + .open(filename) .map_err(DenoError::from) .and_then(move |fs_file| -> OpResult { let resource = resources::add_fs_file(fs_file); |