1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-21 15:04:11 -05:00

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.
This commit is contained in:
Casper Beyer 2021-04-11 20:05:22 +08:00 committed by GitHub
parent c0b6e09172
commit f5a9474952
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 53 additions and 47 deletions

View file

@ -50,8 +50,6 @@ const UNSTABLE_DENO_PROPS: &[&str] = &[
"formatDiagnostics",
"fstat",
"fstatSync",
"ftruncate",
"ftruncateSync",
"futime",
"futimeSync",
"hostname",

View file

@ -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>;
}

View file

@ -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.
*

View file

@ -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,

View file

@ -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;