11
11
* 3. Return ENOSYS and warn at runtime if called.
12
12
*/
13
13
14
+ #define _GNU_SOURCE // for struct mmsghdr
14
15
#include <errno.h>
15
- #include <stdio.h>
16
- #include <sys/types.h>
17
- #include <unistd.h>
18
- #include <syscall_arch.h>
19
16
#include <string.h>
20
- #include <sys/resource.h>
21
- #include <sys/stat.h>
22
- #include <time.h>
23
- #include <sys/utsname.h>
17
+ #include <syscall_arch.h>
24
18
#include <emscripten/console.h>
25
19
#include <emscripten/version.h>
26
20
#include <emscripten/stack.h>
@@ -47,24 +41,22 @@ static mode_t g_umask = S_IWGRP | S_IWOTH;
47
41
#define STRINGIFY (s ) #s
48
42
#define STR (s ) STRINGIFY(s)
49
43
50
- weak int __syscall_uname (intptr_t buf ) {
44
+ weak int __syscall_uname (struct utsname * buf ) {
51
45
if (!buf ) {
52
46
return - EFAULT ;
53
47
}
54
48
const char * full_version = STR (__EMSCRIPTEN_major__ ) "." \
55
49
STR (__EMSCRIPTEN_minor__ ) "." \
56
50
STR (__EMSCRIPTEN_tiny__ );
57
51
58
- struct utsname * utsname = (struct utsname * )buf ;
59
-
60
- strcpy (utsname -> sysname , "Emscripten" );
61
- strcpy (utsname -> nodename , "emscripten" );
62
- strcpy (utsname -> release , full_version );
63
- strcpy (utsname -> version , "#1" );
52
+ strcpy (buf -> sysname , "Emscripten" );
53
+ strcpy (buf -> nodename , "emscripten" );
54
+ strcpy (buf -> release , full_version );
55
+ strcpy (buf -> version , "#1" );
64
56
#ifdef __wasm64__
65
- strcpy (utsname -> machine , "wasm64" );
57
+ strcpy (buf -> machine , "wasm64" );
66
58
#else
67
- strcpy (utsname -> machine , "wasm32" );
59
+ strcpy (buf -> machine , "wasm32" );
68
60
#endif
69
61
return 0 ;
70
62
}
@@ -105,15 +97,15 @@ weak pid_t __syscall_getppid() {
105
97
return g_ppid ;
106
98
}
107
99
108
- weak int __syscall_linkat (int olddirfd , intptr_t oldpath , int newdirfd , intptr_t newpath , int flags ) {
100
+ weak int __syscall_linkat (int olddirfd , const char * oldpath , int newdirfd , const char * newpath , int flags ) {
109
101
return - EMLINK ; // no hardlinks for us
110
102
}
111
103
112
- weak int __syscall_getgroups32 (int count , intptr_t list ) {
104
+ weak int __syscall_getgroups32 (int count , gid_t list [] ) {
113
105
if (count < 1 ) {
114
106
return - EINVAL ;
115
107
}
116
- (( gid_t * ) list ) [0 ] = 0 ;
108
+ list [0 ] = 0 ;
117
109
return 1 ;
118
110
}
119
111
@@ -134,7 +126,7 @@ struct kusage {
134
126
long stime_tv_usec ;
135
127
};
136
128
137
- weak int __syscall_getrusage (int who , intptr_t usage ) {
129
+ weak int __syscall_getrusage (int who , void * usage ) {
138
130
REPORT (getrusage );
139
131
struct kusage * u = (struct kusage * )usage ;
140
132
u -> utime_tv_sec = 1 ;
@@ -152,7 +144,7 @@ weak int __syscall_setpriority(int which, id_t who, int prio) {
152
144
return - EPERM ;
153
145
}
154
146
155
- weak int __syscall_setdomainname (intptr_t name , size_t size ) {
147
+ weak int __syscall_setdomainname (const char * name , size_t len ) {
156
148
return - EPERM ;
157
149
}
158
150
@@ -172,18 +164,18 @@ weak gid_t __syscall_getegid32(void) {
172
164
return 0 ;
173
165
}
174
166
175
- weak int __syscall_getresuid32 (intptr_t ruid , intptr_t euid , intptr_t suid ) {
176
- * (( uid_t * ) ruid ) = 0 ;
177
- * (( uid_t * ) euid ) = 0 ;
178
- * (( uid_t * ) suid ) = 0 ;
167
+ weak int __syscall_getresuid32 (uid_t * ruid , uid_t * euid , uid_t * suid ) {
168
+ * ruid = 0 ;
169
+ * euid = 0 ;
170
+ * suid = 0 ;
179
171
return 0 ;
180
172
}
181
173
182
- weak int __syscall_getresgid32 (intptr_t ruid , intptr_t euid , intptr_t suid ) {
174
+ weak int __syscall_getresgid32 (gid_t * rgid , gid_t * egid , gid_t * sgid ) {
183
175
REPORT (getresgid32 );
184
- * (( uid_t * ) ruid ) = 0 ;
185
- * (( uid_t * ) euid ) = 0 ;
186
- * (( uid_t * ) suid ) = 0 ;
176
+ * rgid = 0 ;
177
+ * egid = 0 ;
178
+ * sgid = 0 ;
187
179
return 0 ;
188
180
}
189
181
@@ -192,28 +184,28 @@ weak int __syscall_pause() {
192
184
return - EINTR ; // we can't pause
193
185
}
194
186
195
- weak int __syscall_madvise (intptr_t addr , size_t length , int advice ) {
187
+ weak int __syscall_madvise (void * addr , size_t length , int advice ) {
196
188
REPORT (madvise );
197
189
// advice is welcome, but ignored
198
190
return 0 ;
199
191
}
200
192
201
- weak int __syscall_mlock (intptr_t addr , size_t len ) {
193
+ weak int __syscall_mlock (const void * addr , size_t len ) {
202
194
REPORT (mlock );
203
195
return 0 ;
204
196
}
205
197
206
- weak int __syscall_munlock (intptr_t addr , size_t len ) {
198
+ weak int __syscall_munlock (const void * addr , size_t len ) {
207
199
REPORT (munlock );
208
200
return 0 ;
209
201
}
210
202
211
- weak int __syscall_mprotect (size_t addr , size_t len , int prot ) {
203
+ weak int __syscall_mprotect (size_t start , size_t len , int prot ) {
212
204
REPORT (mprotect );
213
205
return 0 ; // let's not and say we did
214
206
}
215
207
216
- weak int __syscall_mremap (intptr_t old_addr , size_t old_size , size_t new_size , int flags , intptr_t new_addr ) {
208
+ weak int __syscall_mremap (void * old_addr , size_t old_size , size_t new_size , int flags , void * new_addr ) {
217
209
REPORT (mremap );
218
210
return - ENOMEM ; // never succeed
219
211
}
@@ -228,48 +220,47 @@ weak int __syscall_munlockall() {
228
220
return 0 ;
229
221
}
230
222
231
- weak int __syscall_prlimit64 (pid_t pid , int resource , intptr_t new_limit , intptr_t old_limit ) {
223
+ weak int __syscall_prlimit64 (pid_t pid , int resource , const struct rlimit * new_limit , struct rlimit * old_limit ) {
232
224
REPORT (prlimit64 );
233
- struct rlimit * old = (struct rlimit * )old_limit ;
234
225
if (new_limit ) {
235
226
return - EPERM ;
236
227
}
237
- if (old ) {
228
+ if (old_limit ) {
238
229
if (resource == RLIMIT_NOFILE ) {
239
230
// See FS.MAX_OPEN_FDS in src/lib/libfs.js
240
- old -> rlim_cur = 4096 ;
241
- old -> rlim_max = 4096 ;
231
+ old_limit -> rlim_cur = 4096 ;
232
+ old_limit -> rlim_max = 4096 ;
242
233
} else if (resource == RLIMIT_STACK ) {
243
234
uintptr_t end = emscripten_stack_get_end ();
244
235
uintptr_t base = emscripten_stack_get_base ();
245
236
246
- old -> rlim_cur = base - end ;
237
+ old_limit -> rlim_cur = base - end ;
247
238
// we can not change the stack size, so the maximum is the same as the current
248
- old -> rlim_max = base - end ;
239
+ old_limit -> rlim_max = base - end ;
249
240
} else {
250
241
// Just report no limits
251
- old -> rlim_cur = RLIM_INFINITY ;
252
- old -> rlim_max = RLIM_INFINITY ;
242
+ old_limit -> rlim_cur = RLIM_INFINITY ;
243
+ old_limit -> rlim_max = RLIM_INFINITY ;
253
244
}
254
245
}
255
246
return 0 ;
256
247
}
257
248
258
- weak int __syscall_setsockopt (int sockfd , int level , int optname , intptr_t optval , socklen_t optlen , ...) {
249
+ weak int __syscall_setsockopt (int sockfd , int level , int optname , const void * optval , socklen_t optlen , ...) {
259
250
REPORT (setsockopt );
260
251
return - ENOPROTOOPT ; // The option is unknown at the level indicated.
261
252
}
262
253
263
- weak pid_t __syscall_wait4 (pid_t pid , intptr_t wstatus , int options , int rusage ) {
254
+ weak pid_t __syscall_wait4 (pid_t pid , int * wstatus , int options , struct rusage * rusage ) {
264
255
REPORT (wait4 );
265
256
return (pid_t )- 1 ;
266
257
}
267
258
268
- UNIMPLEMENTED (acct , (intptr_t filename ))
269
- UNIMPLEMENTED (mincore , (intptr_t addr , size_t length , intptr_t vec ))
270
- UNIMPLEMENTED (pipe2 , (intptr_t fds , int flags ))
271
- UNIMPLEMENTED (pselect6 , (int nfds , intptr_t readfds , intptr_t writefds , intptr_t exceptfds , intptr_t timeout , intptr_t sigmaks ))
272
- UNIMPLEMENTED (recvmmsg , (int sockfd , intptr_t msgvec , unsigned int vlen , unsigned int flags , intptr_t timeout ))
273
- UNIMPLEMENTED (sendmmsg , (int sockfd , intptr_t msgvec , unsigned int vlen , unsigned int flags ))
259
+ UNIMPLEMENTED (acct , (const char * filename ))
260
+ UNIMPLEMENTED (mincore , (void * addr , size_t length , unsigned char * vec ))
261
+ UNIMPLEMENTED (pipe2 , (int pipefd [ 2 ] , int flags ))
262
+ UNIMPLEMENTED (pselect6 , (int nfds , fd_set * rfds , fd_set * wfds , fd_set * efds , const struct timespec * ts , const void * mask ))
263
+ UNIMPLEMENTED (recvmmsg , (int sockfd , struct mmsghdr * msgvec , unsigned int vlen , unsigned int flags , struct timespec * timeout ))
264
+ UNIMPLEMENTED (sendmmsg , (int sockfd , struct mmsghdr * msgvec , unsigned int vlen , unsigned int flags ))
274
265
UNIMPLEMENTED (shutdown , (int sockfd , int how , ...))
275
- UNIMPLEMENTED (socketpair , (int domain , int type , int protocol , intptr_t fds , ...))
266
+ UNIMPLEMENTED (socketpair , (int domain , int type , int protocol , int fd [ 2 ] , ...))
0 commit comments