@@ -75,59 +75,57 @@ var SyscallsLibrary = {
75
75
var buffer = HEAPU8 . slice ( addr , addr + len ) ;
76
76
FS . msync ( stream , buffer , offset , len , flags ) ;
77
77
} ,
78
+ // Just like `FS.getStream` but will throw EBADF if stream is undefined.
79
+ getStreamFromFD ( fd ) {
80
+ var stream = FS . getStreamChecked ( fd ) ;
81
+ #if SYSCALL_DEBUG
82
+ dbg ( ` (stream: "${ stream . path } ")` ) ;
78
83
#endif
79
-
80
- // arguments handling
84
+ return stream ;
85
+ } ,
86
+ #endif // SYSCALLS_REQUIRE_FILESYSTEM
81
87
82
88
varargs : undefined ,
83
89
84
- get ( ) {
85
- #if ASSERTIONS
86
- assert ( SYSCALLS . varargs != undefined ) ;
87
- #endif
88
- // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number.
89
- var ret = { { { makeGetValue ( '+SYSCALLS.varargs' , 0 , 'i32' ) } } } ;
90
- SYSCALLS . varargs += 4 ;
90
+ getStr ( ptr ) {
91
+ var ret = UTF8ToString ( ptr ) ;
91
92
#if SYSCALL_DEBUG
92
- dbg ( ` (raw : "${ ret } ")` ) ;
93
+ dbg ( ` (str : "${ ret } ")` ) ;
93
94
#endif
94
95
return ret ;
95
96
} ,
97
+ } ,
96
98
97
- #if MEMORY64
98
- getp ( ) {
99
+ $syscallGetVarargI__internal : true ,
100
+ $syscallGetVarargI : function ( ) {
99
101
#if ASSERTIONS
100
- assert ( SYSCALLS . varargs != undefined ) ;
102
+ assert ( SYSCALLS . varargs != undefined ) ;
101
103
#endif
102
- var ret = { { { makeGetValue ( 'SYSCALLS.varargs' , 0 , '*' ) } } } ;
103
- SYSCALLS . varargs += { { { POINTER_SIZE } } } ;
104
+ // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number.
105
+ var ret = { { { makeGetValue ( '+SYSCALLS.varargs' , 0 , 'i32' ) } } } ;
106
+ SYSCALLS . varargs += 4 ;
104
107
#if SYSCALL_DEBUG
105
- dbg ( ` ( raw : "${ret}" ) `);
106
- #endif
107
- return ret;
108
- },
109
- #else
110
- getp() { return SYSCALLS.get() },
108
+ dbg ( ` (raw: "${ ret } ")` ) ;
111
109
#endif
110
+ return ret ;
111
+ } ,
112
112
113
- getStr(ptr) {
114
- var ret = UTF8ToString(ptr);
115
- #if SYSCALL_DEBUG
116
- dbg(` ( str : "${ret}" ) `);
113
+ $syscallGetVarargP__internal: true ,
114
+ #if MEMORY64
115
+ $syscallGetVarargP: function ( ) {
116
+ #if ASSERTIONS
117
+ assert ( SYSCALLS . varargs != undefined ) ;
117
118
#endif
118
- return ret;
119
- },
120
- #if SYSCALLS_REQUIRE_FILESYSTEM
121
- // Just like ` FS . getStream ` but will throw EBADF if stream is undefined.
122
- getStreamFromFD(fd) {
123
- var stream = FS.getStreamChecked(fd);
119
+ var ret = { { { makeGetValue ( 'SYSCALLS.varargs' , 0 , '*' ) } } } ;
120
+ SYSCALLS . varargs += { { { POINTER_SIZE } } } ;
124
121
#if SYSCALL_DEBUG
125
- dbg(` ( stream : "${stream.path }" ) `);
122
+ dbg ( ` ( raw : "${ret }" ) `);
126
123
#endif
127
- return stream;
128
- },
129
- #endif // SYSCALLS_REQUIRE_FILESYSTEM
124
+ return ret;
130
125
},
126
+ #else
127
+ $syscallGetVarargP: '$syscallGetVarargI',
128
+ #endif
131
129
132
130
_mmap_js__i53abi: true,
133
131
_mmap_js__deps: ['$SYSCALLS',
@@ -198,6 +196,10 @@ var SyscallsLibrary = {
198
196
199
197
return 0;
200
198
},
199
+
200
+ #if SYSCALLS_REQUIRE_FILESYSTEM
201
+ __syscall_ioctl__deps: ['$syscallGetVarargP'],
202
+ #endif
201
203
__syscall_ioctl: (fd, op, varargs) => {
202
204
#if SYSCALLS_REQUIRE_FILESYSTEM == 0
203
205
#if SYSCALL_DEBUG
@@ -218,7 +220,7 @@ var SyscallsLibrary = {
218
220
if (!stream.tty) return -{{{ cDefs.ENOTTY }}};
219
221
if (stream.tty.ops.ioctl_tcgets) {
220
222
var termios = stream.tty.ops.ioctl_tcgets(stream);
221
- var argp = SYSCALLS.getp ();
223
+ var argp = syscallGetVarargP ();
222
224
{{{ makeSetValue('argp', C_STRUCTS.termios.c_iflag, 'termios.c_iflag || 0', 'i32') }}};
223
225
{{{ makeSetValue('argp', C_STRUCTS.termios.c_oflag, 'termios.c_oflag || 0', 'i32') }}};
224
226
{{{ makeSetValue('argp', C_STRUCTS.termios.c_cflag, 'termios.c_cflag || 0', 'i32') }}};
@@ -244,7 +246,7 @@ var SyscallsLibrary = {
244
246
case {{{ cDefs.TCSETSF }}}: {
245
247
if (!stream.tty) return -{{{ cDefs.ENOTTY }}};
246
248
if (stream.tty.ops.ioctl_tcsets) {
247
- var argp = SYSCALLS.getp ();
249
+ var argp = syscallGetVarargP ();
248
250
var c_iflag = {{{ makeGetValue('argp', C_STRUCTS.termios.c_iflag, 'i32') }}};
249
251
var c_oflag = {{{ makeGetValue('argp', C_STRUCTS.termios.c_oflag, 'i32') }}};
250
252
var c_cflag = {{{ makeGetValue('argp', C_STRUCTS.termios.c_cflag, 'i32') }}};
@@ -259,7 +261,7 @@ var SyscallsLibrary = {
259
261
}
260
262
case {{{ cDefs.TIOCGPGRP }}}: {
261
263
if (!stream.tty) return -{{{ cDefs.ENOTTY }}};
262
- var argp = SYSCALLS.getp ();
264
+ var argp = syscallGetVarargP ();
263
265
{{{ makeSetValue('argp', 0, 0, 'i32') }}};
264
266
return 0;
265
267
}
@@ -268,7 +270,7 @@ var SyscallsLibrary = {
268
270
return -{{{ cDefs.EINVAL }}}; // not supported
269
271
}
270
272
case {{{ cDefs.FIONREAD }}}: {
271
- var argp = SYSCALLS.getp ();
273
+ var argp = syscallGetVarargP ();
272
274
return FS.ioctl(stream, op, argp);
273
275
}
274
276
case {{{ cDefs.TIOCGWINSZ }}}: {
@@ -277,7 +279,7 @@ var SyscallsLibrary = {
277
279
if (!stream.tty) return -{{{ cDefs.ENOTTY }}};
278
280
if (stream.tty.ops.ioctl_tiocgwinsz) {
279
281
var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);
280
- var argp = SYSCALLS.getp ();
282
+ var argp = syscallGetVarargP ();
281
283
{{{ makeSetValue('argp', 0, 'winsize[0]', 'i16') }}};
282
284
{{{ makeSetValue('argp', 2, 'winsize[1]', 'i16') }}};
283
285
}
@@ -742,6 +744,9 @@ var SyscallsLibrary = {
742
744
FS.llseek(stream, idx * struct_size, {{{ cDefs.SEEK_SET }}});
743
745
return pos;
744
746
},
747
+ #if SYSCALLS_REQUIRE_FILESYSTEM
748
+ __syscall_fcntl64__deps: ['$syscallGetVarargP', '$syscallGetVarargI'],
749
+ #endif
745
750
__syscall_fcntl64: (fd, cmd, varargs) => {
746
751
#if SYSCALLS_REQUIRE_FILESYSTEM == 0
747
752
#if SYSCALL_DEBUG
@@ -752,7 +757,7 @@ var SyscallsLibrary = {
752
757
var stream = SYSCALLS.getStreamFromFD(fd);
753
758
switch (cmd) {
754
759
case {{{ cDefs.F_DUPFD }}}: {
755
- var arg = SYSCALLS.get ();
760
+ var arg = syscallGetVarargI ();
756
761
if (arg < 0) {
757
762
return -{{{ cDefs.EINVAL }}};
758
763
}
@@ -769,12 +774,12 @@ var SyscallsLibrary = {
769
774
case {{{ cDefs.F_GETFL }}}:
770
775
return stream.flags;
771
776
case {{{ cDefs.F_SETFL }}}: {
772
- var arg = SYSCALLS.get ();
777
+ var arg = syscallGetVarargI ();
773
778
stream.flags |= arg;
774
779
return 0;
775
780
}
776
781
case {{{ cDefs.F_GETLK }}}: {
777
- var arg = SYSCALLS.getp ();
782
+ var arg = syscallGetVarargP ();
778
783
var offset = {{{ C_STRUCTS.flock.l_type }}};
779
784
// We're always unlocked.
780
785
{{{ makeSetValue('arg', 'offset', cDefs.F_UNLCK, 'i16') }}};
@@ -825,10 +830,11 @@ var SyscallsLibrary = {
825
830
__syscall_fadvise64: (fd, offset, len, advice) => {
826
831
return 0; // your advice is important to us (but we can't use it)
827
832
},
833
+ __syscall_openat__deps: ['$syscallGetVarargI'],
828
834
__syscall_openat: (dirfd, path, flags, varargs) => {
829
835
path = SYSCALLS.getStr(path);
830
836
path = SYSCALLS.calculateAt(dirfd, path);
831
- var mode = varargs ? SYSCALLS.get () : 0;
837
+ var mode = varargs ? syscallGetVarargI () : 0;
832
838
return FS.open(path, flags, mode).fd;
833
839
},
834
840
__syscall_mkdirat: (dirfd, path, mode) => {
0 commit comments