summaryrefslogtreecommitdiff
path: root/src/ops.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2018-12-12 18:05:58 +0100
committerRyan Dahl <ry@tinyclouds.org>2018-12-12 12:05:58 -0500
commitc2b91a3ef6305bb0597ec65e887bbab2d9f512a2 (patch)
tree378bce42abd179fd32e6c48580d2818f36253235 /src/ops.rs
parente31866a60da6edd4ed9b604caf5a9dfa6b1631ae (diff)
Flesh out open() modes (#1282)
Diffstat (limited to 'src/ops.rs')
-rw-r--r--src/ops.rs42
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);