From 5d9bb8b4b042f4d4fbbe61b31a50a26db7f1ae63 Mon Sep 17 00:00:00 2001 From: Leo Kettmeir Date: Tue, 13 Dec 2022 05:12:49 +0100 Subject: feat: support `createNew` in `Deno.writeFile` (#17023) --- runtime/js/40_write_file.js | 2 ++ runtime/ops/fs.rs | 14 ++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'runtime') diff --git a/runtime/js/40_write_file.js b/runtime/js/40_write_file.js index 36bd317b7..8d026245f 100644 --- a/runtime/js/40_write_file.js +++ b/runtime/js/40_write_file.js @@ -17,6 +17,7 @@ options.mode, options.append ?? false, options.create ?? true, + options.createNew ?? false, data, ); } @@ -41,6 +42,7 @@ options.mode, options.append ?? false, options.create ?? true, + options.createNew ?? false, data, cancelRid, ); diff --git a/runtime/ops/fs.rs b/runtime/ops/fs.rs index 8d719393f..b661c6ea8 100644 --- a/runtime/ops/fs.rs +++ b/runtime/ops/fs.rs @@ -222,14 +222,18 @@ async fn op_open_async( } #[inline] -fn write_open_options(create: bool, append: bool) -> OpenOptions { +fn write_open_options( + create: bool, + append: bool, + create_new: bool, +) -> OpenOptions { OpenOptions { read: false, write: true, create, truncate: !append, append, - create_new: false, + create_new, } } @@ -240,13 +244,14 @@ fn op_write_file_sync( mode: Option, append: bool, create: bool, + create_new: bool, data: ZeroCopyBuf, ) -> Result<(), AnyError> { let (path, open_options) = open_helper( state, &path, mode, - Some(&write_open_options(create, append)), + Some(&write_open_options(create, append, create_new)), "Deno.writeFileSync()", )?; write_file(&path, open_options, mode, data) @@ -259,6 +264,7 @@ async fn op_write_file_async( mode: Option, append: bool, create: bool, + create_new: bool, data: ZeroCopyBuf, cancel_rid: Option, ) -> Result<(), AnyError> { @@ -274,7 +280,7 @@ async fn op_write_file_async( &mut state.borrow_mut(), &path, mode, - Some(&write_open_options(create, append)), + Some(&write_open_options(create, append, create_new)), "Deno.writeFile()", )?; let write_future = tokio::task::spawn_blocking(move || { -- cgit v1.2.3