@@ -11,10 +11,37 @@ export class OpenFile extends Fd {
11
11
this . file = file ;
12
12
}
13
13
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
+
14
26
fd_fdstat_get ( ) : { ret : number ; fdstat : wasi . Fdstat | null } {
15
27
return { ret : 0 , fdstat : new wasi . Fdstat ( wasi . FILETYPE_REGULAR_FILE , 0 ) } ;
16
28
}
17
29
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
+
18
45
fd_read (
19
46
view8 : Uint8Array ,
20
47
iovs : Array < wasi . Iovec > ,
@@ -147,6 +174,16 @@ export class OpenSyncOPFSFile extends Fd {
147
174
this . file = file ;
148
175
}
149
176
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
+
150
187
fd_fdstat_get ( ) : { ret : number ; fdstat : wasi . Fdstat | null } {
151
188
return { ret : 0 , fdstat : new wasi . Fdstat ( wasi . FILETYPE_REGULAR_FILE , 0 ) } ;
152
189
}
@@ -161,6 +198,11 @@ export class OpenSyncOPFSFile extends Fd {
161
198
} ;
162
199
}
163
200
201
+ fd_filestat_set_size ( size : bigint ) : number {
202
+ this . file . handle . truncate ( Number ( size ) ) ;
203
+ return wasi . ERRNO_SUCCESS ;
204
+ }
205
+
164
206
fd_read (
165
207
view8 : Uint8Array ,
166
208
iovs : Array < wasi . Iovec > ,
@@ -242,6 +284,11 @@ export class OpenDirectory extends Fd {
242
284
this . dir = dir ;
243
285
}
244
286
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
+
245
292
fd_fdstat_get ( ) : { ret : number ; fdstat : wasi . Fdstat | null } {
246
293
return { ret : 0 , fdstat : new wasi . Fdstat ( wasi . FILETYPE_DIRECTORY , 0 ) } ;
247
294
}
0 commit comments