Skip to content

Commit aba1aa4

Browse files
authored
Merge pull request #72 from bjorn3/couple_of_fixes
Couple of fixes
2 parents 04004aa + d915a01 commit aba1aa4

File tree

3 files changed

+49
-4
lines changed

3 files changed

+49
-4
lines changed

src/fd.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
/* eslint @typescript-eslint/no-unused-vars:0 */
22
import * as wasi from "./wasi_defs.js";
33

4-
export class Fd {
4+
export abstract class Fd {
55
fd_advise(offset: bigint, len: bigint, advice: number): number {
6-
return wasi.ERRNO_NOTSUP;
6+
return wasi.ERRNO_SUCCESS;
77
}
88
fd_allocate(offset: bigint, len: bigint): number {
99
return wasi.ERRNO_NOTSUP;

src/fs_core.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,37 @@ export class OpenFile extends Fd {
1111
this.file = file;
1212
}
1313

14+
fd_allocate(offset: bigint, len: bigint): number {
15+
if (this.file.size > offset + len) {
16+
// already big enough
17+
} else {
18+
// extend
19+
const new_data = new Uint8Array(Number(offset + len));
20+
new_data.set(this.file.data, 0);
21+
this.file.data = new_data;
22+
}
23+
return wasi.ERRNO_SUCCESS;
24+
}
25+
1426
fd_fdstat_get(): { ret: number; fdstat: wasi.Fdstat | null } {
1527
return { ret: 0, fdstat: new wasi.Fdstat(wasi.FILETYPE_REGULAR_FILE, 0) };
1628
}
1729

30+
fd_filestat_set_size(size: bigint): number {
31+
if (this.file.size > size) {
32+
// truncate
33+
this.file.data = new Uint8Array(
34+
this.file.data.buffer.slice(0, Number(size)),
35+
);
36+
} else {
37+
// extend
38+
const new_data = new Uint8Array(Number(size));
39+
new_data.set(this.file.data, 0);
40+
this.file.data = new_data;
41+
}
42+
return wasi.ERRNO_SUCCESS;
43+
}
44+
1845
fd_read(
1946
view8: Uint8Array,
2047
iovs: Array<wasi.Iovec>,
@@ -147,6 +174,16 @@ export class OpenSyncOPFSFile extends Fd {
147174
this.file = file;
148175
}
149176

177+
fd_allocate(offset: bigint, len: bigint): number {
178+
if (BigInt(this.file.handle.getSize()) > offset + len) {
179+
// already big enough
180+
} else {
181+
// extend
182+
this.file.handle.truncate(Number(offset + len));
183+
}
184+
return wasi.ERRNO_SUCCESS;
185+
}
186+
150187
fd_fdstat_get(): { ret: number; fdstat: wasi.Fdstat | null } {
151188
return { ret: 0, fdstat: new wasi.Fdstat(wasi.FILETYPE_REGULAR_FILE, 0) };
152189
}
@@ -161,6 +198,11 @@ export class OpenSyncOPFSFile extends Fd {
161198
};
162199
}
163200

201+
fd_filestat_set_size(size: bigint): number {
202+
this.file.handle.truncate(Number(size));
203+
return wasi.ERRNO_SUCCESS;
204+
}
205+
164206
fd_read(
165207
view8: Uint8Array,
166208
iovs: Array<wasi.Iovec>,
@@ -242,6 +284,11 @@ export class OpenDirectory extends Fd {
242284
this.dir = dir;
243285
}
244286

287+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
288+
fd_seek(offset: bigint, whence: number): { ret: number; offset: bigint } {
289+
return { ret: wasi.ERRNO_ISDIR, offset: 0n };
290+
}
291+
245292
fd_fdstat_get(): { ret: number; fdstat: wasi.Fdstat | null } {
246293
return { ret: 0, fdstat: new wasi.Fdstat(wasi.FILETYPE_DIRECTORY, 0) };
247294
}

test/skip.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
"WASI Rust tests": {
1111
"sched_yield": "not implemented yet",
1212
"path_rename": "fail",
13-
"fd_advise": "fail",
1413
"path_exists": "fail",
1514
"path_open_dirfd_not_dir": "fail",
1615
"fd_filestat_set": "fail",
@@ -32,7 +31,6 @@
3231
"nofollow_errors": "fail",
3332
"path_open_preopen": "fail",
3433
"fd_readdir": "fail",
35-
"directory_seek": "fail",
3634
"symlink_filestat": "fail",
3735
"symlink_loop": "fail",
3836
"interesting_paths": "fail"

0 commit comments

Comments
 (0)