@@ -807,29 +807,6 @@ var SyscallsLibrary = {
807807 FS . chdir ( stream . path ) ;
808808 return 0 ;
809809 } ,
810- __syscall140 : function ( which , varargs ) { // llseek
811- var stream = SYSCALLS . getStreamFromFD ( ) , offset_high = SYSCALLS . get ( ) , offset_low = SYSCALLS . get ( ) , result = SYSCALLS . get ( ) , whence = SYSCALLS . get ( ) ;
812- #if SYSCALLS_REQUIRE_FILESYSTEM
813- var HIGH_OFFSET = 0x100000000 ; // 2^32
814- // use an unsigned operator on low and shift high by 32-bits
815- var offset = offset_high * HIGH_OFFSET + ( offset_low >>> 0 ) ;
816-
817- var DOUBLE_LIMIT = 0x20000000000000 ; // 2^53
818- // we also check for equality since DOUBLE_LIMIT + 1 == DOUBLE_LIMIT
819- if ( offset <= - DOUBLE_LIMIT || offset >= DOUBLE_LIMIT ) {
820- return - { { { cDefine ( 'EOVERFLOW' ) } } } ;
821- }
822-
823- FS . llseek ( stream , offset , whence ) ;
824- { { { makeSetValue ( 'result' , '0' , 'stream.position' , 'i64' ) } } } ;
825- if ( stream . getdents && offset === 0 && whence === { { { cDefine ( 'SEEK_SET' ) } } } ) stream . getdents = null ; // reset readdir state
826- #else
827- #if ASSERTIONS
828- abort ( 'it should not be possible to operate on streams when !SYSCALLS_REQUIRE_FILESYSTEM' ) ;
829- #endif
830- #endif
831- return 0 ;
832- } ,
833810 __syscall142 : function ( which , varargs ) { // newselect
834811 // readfds are supported,
835812 // writefds checks socket open status
@@ -1469,6 +1446,29 @@ var SyscallsLibrary = {
14691446 { { { makeSetValue ( 'pnum' , 0 , 'num' , 'i32' ) } } }
14701447 return 0 ;
14711448 } ,
1449+ fd_seek : function ( fd , offset_low , offset_high , whence , newOffset ) {
1450+ #if SYSCALLS_REQUIRE_FILESYSTEM
1451+ var stream = SYSCALLS . getStreamFromFD ( fd ) ;
1452+ var HIGH_OFFSET = 0x100000000 ; // 2^32
1453+ // use an unsigned operator on low and shift high by 32-bits
1454+ var offset = offset_high * HIGH_OFFSET + ( offset_low >>> 0 ) ;
1455+
1456+ var DOUBLE_LIMIT = 0x20000000000000 ; // 2^53
1457+ // we also check for equality since DOUBLE_LIMIT + 1 == DOUBLE_LIMIT
1458+ if ( offset <= - DOUBLE_LIMIT || offset >= DOUBLE_LIMIT ) {
1459+ return - { { { cDefine ( 'EOVERFLOW' ) } } } ;
1460+ }
1461+
1462+ FS . llseek ( stream , offset , whence ) ;
1463+ { { { makeSetValue ( 'newOffset' , '0' , 'stream.position' , 'i64' ) } } } ;
1464+ if ( stream . getdents && offset === 0 && whence === { { { cDefine ( 'SEEK_SET' ) } } } ) stream . getdents = null ; // reset readdir state
1465+ #else
1466+ #if ASSERTIONS
1467+ abort ( 'it should not be possible to operate on streams when !SYSCALLS_REQUIRE_FILESYSTEM' ) ;
1468+ #endif
1469+ #endif
1470+ return 0 ;
1471+ } ,
14721472} ;
14731473
14741474if ( SYSCALL_DEBUG ) {
@@ -1828,6 +1828,7 @@ var WASI_SYSCALLS = set([
18281828 'fd_write' ,
18291829 'fd_close' ,
18301830 'fd_read' ,
1831+ 'fd_seek' ,
18311832] ) ;
18321833
18331834// Fallback for cases where the wasi_unstable.name prefixing fails,
0 commit comments