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