summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCasper Beyer <caspervonb@pm.me>2021-04-11 20:05:22 +0800
committerGitHub <noreply@github.com>2021-04-11 14:05:22 +0200
commitf5a9474952f459a5095e0aae68e0984fdd84b210 (patch)
tree314c1e9e9c5d86e0360b5e21d308d870d009723d
parentc0b6e09172f242e98a5bc82bd6f5dc20f705c8a2 (diff)
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.
-rw-r--r--cli/diagnostics.rs2
-rw-r--r--cli/dts/lib.deno.ns.d.ts51
-rw-r--r--cli/dts/lib.deno.unstable.d.ts41
-rw-r--r--runtime/js/90_deno_ns.js4
-rw-r--r--runtime/ops/fs.rs2
5 files changed, 53 insertions, 47 deletions
diff --git a/cli/diagnostics.rs b/cli/diagnostics.rs
index f690013f1..f24a2e21d 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 09f39d6b8..931d28877 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<void>;
+
+ /**
+ * 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<void>;
}
diff --git a/cli/dts/lib.deno.unstable.d.ts b/cli/dts/lib.deno.unstable.d.ts
index 9113d38c7..3fbf3d94d 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<void>;
-
/** **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 c240d1ea2..3c13489c7 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 3d9802b08..a084fdb15 100644
--- a/runtime/ops/fs.rs
+++ b/runtime/ops/fs.rs
@@ -1299,7 +1299,6 @@ fn op_ftruncate_sync(
args: FtruncateArgs,
_zero_copy: Option<ZeroCopyBuf>,
) -> 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<ZeroCopyBuf>,
) -> Result<(), AnyError> {
- super::check_unstable2(&state, "Deno.ftruncate");
let rid = args.rid;
let len = args.len as u64;