From f5a9474952f459a5095e0aae68e0984fdd84b210 Mon Sep 17 00:00:00 2001 From: Casper Beyer Date: Sun, 11 Apr 2021 20:05:22 +0800 Subject: [PATCH] feat: stabilize Deno.ftruncate and Deno.ftruncateSync (#10126) This stabilizes Deno.ftruncate and Deno.ftruncateSync. This is a well known system call and the interface is not going to change. Implicitly requires write permissions as the file has to be opened with write to be truncated. --- cli/diagnostics.rs | 2 -- cli/dts/lib.deno.ns.d.ts | 51 ++++++++++++++++++++++++++++++++++ cli/dts/lib.deno.unstable.d.ts | 41 --------------------------- runtime/js/90_deno_ns.js | 4 +-- runtime/ops/fs.rs | 2 -- 5 files changed, 53 insertions(+), 47 deletions(-) diff --git a/cli/diagnostics.rs b/cli/diagnostics.rs index f690013f1b..f24a2e21d7 100644 --- a/cli/diagnostics.rs +++ b/cli/diagnostics.rs @@ -50,8 +50,6 @@ const UNSTABLE_DENO_PROPS: &[&str] = &[ "formatDiagnostics", "fstat", "fstatSync", - "ftruncate", - "ftruncateSync", "futime", "futimeSync", "hostname", diff --git a/cli/dts/lib.deno.ns.d.ts b/cli/dts/lib.deno.ns.d.ts index 09f39d6b83..931d288778 100644 --- a/cli/dts/lib.deno.ns.d.ts +++ b/cli/dts/lib.deno.ns.d.ts @@ -2335,4 +2335,55 @@ declare namespace Deno { newpath: string, options?: SymlinkOptions, ): Promise; + + /** + * Synchronously truncates or extends the specified file stream, to reach the + * specified `len`. + * + * If `len` is not specified then the entire file contents are truncated as if len was set to 0. + * + * if the file previously was larger than this new length, the extra data is lost. + * + * if the file previously was shorter, it is extended, and the extended part reads as null bytes ('\0'). + * + * ```ts + * // truncate the entire file + * const file = Deno.open("my_file.txt", { read: true, write: true, truncate: true, create: true }); + * Deno.ftruncateSync(file.rid); + * + * // truncate part of the file + * const file = Deno.open("my_file.txt", { read: true, write: true, create: true }); + * Deno.write(file.rid, new TextEncoder().encode("Hello World")); + * Deno.ftruncateSync(file.rid, 7); + * const data = new Uint8Array(32); + * Deno.readSync(file.rid, data); + * console.log(new TextDecoder().decode(data)); // Hello W + * ``` + */ + export function ftruncateSync(rid: number, len?: number): void; + + /** + * Truncates or extends the specified file stream, to reach the specified `len`. + * + * If `len` is not specified then the entire file contents are truncated as if len was set to 0. + * + * If the file previously was larger than this new length, the extra data is lost. + * + * If the file previously was shorter, it is extended, and the extended part reads as null bytes ('\0'). + * + * ```ts + * // truncate the entire file + * const file = Deno.open("my_file.txt", { read: true, write: true, create: true }); + * await Deno.ftruncate(file.rid); + * + * // truncate part of the file + * const file = Deno.open("my_file.txt", { read: true, write: true, create: true }); + * await Deno.write(file.rid, new TextEncoder().encode("Hello World")); + * await Deno.ftruncate(file.rid, 7); + * const data = new Uint8Array(32); + * await Deno.read(file.rid, data); + * console.log(new TextDecoder().decode(data)); // Hello W + * ``` + */ + export function ftruncate(rid: number, len?: number): Promise; } diff --git a/cli/dts/lib.deno.unstable.d.ts b/cli/dts/lib.deno.unstable.d.ts index 9113d38c7f..3fbf3d94dd 100644 --- a/cli/dts/lib.deno.unstable.d.ts +++ b/cli/dts/lib.deno.unstable.d.ts @@ -1042,47 +1042,6 @@ declare namespace Deno { */ export function hostname(): string; - /** **UNSTABLE**: new API, yet to be vetted. - * Synchronously truncates or extends the specified file stream, to reach the - * specified `len`. If `len` is not specified then the entire file contents - * are truncated. - * - * ```ts - * // truncate the entire file - * const file = Deno.open("my_file.txt", { read: true, write: true, truncate: true, create: true }); - * Deno.ftruncateSync(file.rid); - * - * // truncate part of the file - * const file = Deno.open("my_file.txt", { read: true, write: true, create: true }); - * Deno.write(file.rid, new TextEncoder().encode("Hello World")); - * Deno.ftruncateSync(file.rid, 7); - * const data = new Uint8Array(32); - * Deno.readSync(file.rid, data); - * console.log(new TextDecoder().decode(data)); // Hello W - * ``` - */ - export function ftruncateSync(rid: number, len?: number): void; - - /** **UNSTABLE**: new API, yet to be vetted. - * Truncates or extends the specified file stream, to reach the specified `len`. If - * `len` is not specified then the entire file contents are truncated. - * - * ```ts - * // truncate the entire file - * const file = Deno.open("my_file.txt", { read: true, write: true, create: true }); - * await Deno.ftruncate(file.rid); - * - * // truncate part of the file - * const file = Deno.open("my_file.txt", { read: true, write: true, create: true }); - * await Deno.write(file.rid, new TextEncoder().encode("Hello World")); - * await Deno.ftruncate(file.rid, 7); - * const data = new Uint8Array(32); - * await Deno.read(file.rid, data); - * console.log(new TextDecoder().decode(data)); // Hello W - * ``` - */ - export function ftruncate(rid: number, len?: number): Promise; - /** **UNSTABLE**: New API, yet to be vetted. * Synchronously returns a `Deno.FileInfo` for the given file stream. * diff --git a/runtime/js/90_deno_ns.js b/runtime/js/90_deno_ns.js index c240d1ea28..3c13489c7c 100644 --- a/runtime/js/90_deno_ns.js +++ b/runtime/js/90_deno_ns.js @@ -50,6 +50,8 @@ lstat: __bootstrap.fs.lstat, truncateSync: __bootstrap.fs.truncateSync, truncate: __bootstrap.fs.truncate, + ftruncateSync: __bootstrap.fs.ftruncateSync, + ftruncate: __bootstrap.fs.ftruncate, errors: __bootstrap.errors.errors, customInspect: __bootstrap.console.customInspect, inspect: __bootstrap.console.inspect, @@ -124,8 +126,6 @@ startTls: __bootstrap.tls.startTls, fstatSync: __bootstrap.fs.fstatSync, fstat: __bootstrap.fs.fstat, - ftruncateSync: __bootstrap.fs.ftruncateSync, - ftruncate: __bootstrap.fs.ftruncate, umask: __bootstrap.fs.umask, futime: __bootstrap.fs.futime, futimeSync: __bootstrap.fs.futimeSync, diff --git a/runtime/ops/fs.rs b/runtime/ops/fs.rs index 3d9802b08a..a084fdb15b 100644 --- a/runtime/ops/fs.rs +++ b/runtime/ops/fs.rs @@ -1299,7 +1299,6 @@ fn op_ftruncate_sync( args: FtruncateArgs, _zero_copy: Option, ) -> Result<(), AnyError> { - super::check_unstable(state, "Deno.ftruncate"); let rid = args.rid; let len = args.len as u64; StdFileResource::with(state, rid, |r| match r { @@ -1314,7 +1313,6 @@ async fn op_ftruncate_async( args: FtruncateArgs, _zero_copy: Option, ) -> Result<(), AnyError> { - super::check_unstable2(&state, "Deno.ftruncate"); let rid = args.rid; let len = args.len as u64;