OLD | NEW |
---|---|
(Empty) | |
1 /* | |
2 * Copyright 2010 The Native Client Authors. All rights reserved. | |
vissi
2012/04/16 11:20:48
2012
vissi
2012/04/18 16:28:33
Done.
| |
3 * Use of this source code is governed by a BSD-style license that can | |
4 * be found in the LICENSE file. | |
5 */ | |
6 | |
7 #include <assert.h> | |
8 #include <errno.h> | |
9 #include <stdio.h> | |
10 #include <string.h> | |
11 #include <sys/types.h> | |
12 #include <sys/socket.h> | |
13 #include <netinet/in.h> | |
14 #include <arpa/inet.h> | |
15 #include <netdb.h> | |
16 | |
17 #include "irt_syscalls.h" | |
18 | |
19 #pragma GCC diagnostic ignored "-Wnonnull" | |
Evgeniy Stepanov
2012/04/16 11:26:50
Do you really need this?
pasko-google - do not use
2012/04/16 11:32:26
why so?
vissi
2012/04/18 16:28:33
no need, removed
| |
20 | |
21 int test_var; | |
22 #ifdef __cplusplus | |
23 extern "C" { | |
pasko-google - do not use
2012/04/16 11:32:26
there is no need for this in test
vissi
2012/04/18 16:28:33
Done.
| |
24 #endif | |
25 #define DO_WRAP(name) do { \ | |
pasko-google - do not use
2012/04/16 11:32:26
a better name would be REGISTER_WRAPPER_IN_GLIBC
vissi
2012/04/18 16:28:33
Done.
| |
26 __nacl_irt_##name = __nacl_irt_##name##_wrap; \ | |
27 } while (0) | |
28 #define WRAP(name) __nacl_irt_##name##_wrap | |
29 | |
30 int WRAP(socket) (int domain, int type, int protocol) { | |
31 ++test_var; | |
Evgeniy Stepanov
2012/04/16 11:26:50
It might be easier to return a magic value or an e
vissi
2012/04/18 16:28:33
Done.
| |
32 return -1; | |
33 } | |
34 | |
35 int WRAP(accept) (int sockfd, struct sockaddr* addr, socklen_t* addrlen) { | |
Evgeniy Stepanov
2012/04/16 11:26:50
Please remove spaces before argument list and fix
vissi
2012/04/18 16:28:33
Done. Don't we use lint in glibc (irt_syscalls was
| |
36 ++test_var; | |
37 return -1; | |
38 } | |
39 | |
40 int WRAP(bind) (int sockfd, const struct sockaddr* addr, socklen_t addrlen) { | |
41 ++test_var; | |
42 return -1; | |
43 } | |
44 | |
45 int WRAP(listen) (int sockfd, int backlog) { | |
46 ++test_var; | |
47 return -1; | |
48 } | |
49 | |
50 int WRAP(connect) (int sockfd, const struct sockaddr* addr, | |
51 socklen_t addrlen) { | |
52 ++test_var; | |
53 return -1; | |
54 } | |
55 | |
56 int WRAP(send) (int sockfd, const void *buf, size_t len, int flags, | |
57 int* ret) { | |
58 ++test_var; | |
59 return -1; | |
60 } | |
61 | |
62 int WRAP(sendto) (int sockfd, const void *buf, size_t len, int flags, | |
63 const struct sockaddr *dest_addr, socklen_t addrlen, | |
64 int* ret) { | |
65 ++test_var; | |
66 return -1; | |
67 } | |
68 | |
69 int WRAP(sendmsg) (int sockfd, const struct msghdr *msg, int flags, | |
70 int* ret) { | |
71 ++test_var; | |
72 return -1; | |
73 } | |
74 | |
75 int WRAP(recv) (int sockfd, void *buf, size_t len, int flags, int* ret) { | |
76 ++test_var; | |
77 return -1; | |
78 } | |
79 | |
80 int WRAP(recvfrom) (int sockfd, void *buf, size_t len, int flags, | |
81 struct sockaddr *src_addr, socklen_t *addrlen, | |
82 int* ret) { | |
83 ++test_var; | |
84 return -1; | |
85 } | |
86 | |
87 int WRAP(recvmsg) (int sockfd, struct msghdr *msg, int flags, int* ret) { | |
88 ++test_var; | |
89 return -1; | |
90 } | |
91 | |
92 int WRAP(getsockname) (int sockfd, struct sockaddr *addr, | |
93 socklen_t *addrlen) { | |
94 ++test_var; | |
95 return -1; | |
96 } | |
97 | |
98 int WRAP(getpeername) (int sockfd, struct sockaddr *addr, | |
99 socklen_t *addrlen) { | |
100 ++test_var; | |
101 return -1; | |
102 } | |
103 | |
104 int WRAP(setsockopt) (int sockfd, int level, int optname, const void *optval, | |
105 socklen_t optlen) { | |
106 ++test_var; | |
107 return -1; | |
108 } | |
109 | |
110 int WRAP(getsockopt) (int sockfd, int level, int optname, void *optval, | |
111 socklen_t *optlen) { | |
112 ++test_var; | |
113 return -1; | |
114 } | |
115 | |
116 int WRAP(epoll_create) (int size) { | |
117 ++test_var; | |
118 return -1; | |
119 } | |
120 | |
121 int WRAP(epoll_ctl) (int epfd, int op, int fd, struct epoll_event *event) { | |
122 ++test_var; | |
123 return -1; | |
124 } | |
125 | |
126 int WRAP(epoll_wait) (int epfd, struct epoll_event *events, | |
127 int maxevents, int timeout) { | |
128 ++test_var; | |
129 return -1; | |
130 } | |
131 | |
132 int WRAP(epoll_pwait) (int epfd, struct epoll_event *events, | |
133 int maxevents, int timeout, const sigset_t *sigmask, | |
134 size_t sigset_size) { | |
135 ++test_var; | |
136 return -1; | |
137 } | |
138 | |
139 int WRAP(poll) (struct pollfd *fds, nfds_t nfds, int timeout) { | |
140 ++test_var; | |
141 return -1; | |
142 } | |
143 | |
144 int WRAP(ppoll) (struct pollfd *fds, nfds_t nfds, | |
145 const struct timespec *timeout, const sigset_t *sigmask, | |
146 size_t sigset_size) { | |
147 ++test_var; | |
148 return -1; | |
149 } | |
150 | |
151 #ifdef __cplusplus | |
152 } | |
153 #endif | |
154 | |
155 #define DIRSIZE 8192 | |
156 #define PORT 0x1234 | |
157 int main(int argc, char** argv) { | |
158 DO_WRAP(socket); | |
159 DO_WRAP(accept); | |
160 DO_WRAP(bind); | |
161 DO_WRAP(connect); | |
162 DO_WRAP(listen); | |
163 DO_WRAP(recv); | |
164 DO_WRAP(recvmsg); | |
165 DO_WRAP(recvfrom); | |
166 DO_WRAP(send); | |
167 DO_WRAP(sendto); | |
168 DO_WRAP(sendmsg); | |
169 DO_WRAP(setsockopt); | |
170 DO_WRAP(getsockopt); | |
171 DO_WRAP(getpeername); | |
172 DO_WRAP(getsockname); | |
173 DO_WRAP(epoll_create); | |
174 DO_WRAP(epoll_ctl); | |
175 DO_WRAP(epoll_wait); | |
176 DO_WRAP(epoll_pwait); | |
177 DO_WRAP(poll); | |
178 DO_WRAP(ppoll); | |
179 | |
180 char dir[DIRSIZE]; | |
181 int sd, sd_current; | |
182 socklen_t addrlen; | |
183 struct sockaddr_in sin; | |
184 struct sockaddr_in pin; | |
185 struct msghdr msg; | |
186 struct epoll_event event; | |
187 struct pollfd pollfds; | |
188 struct timespec timeout; | |
189 sigset_t sigmask; | |
190 | |
191 int prev_var = test_var; | |
192 sd = socket(AF_INET, SOCK_STREAM, 0); | |
193 assert(test_var - prev_var == 1); | |
194 | |
195 memset(&sin, 0, sizeof(sin)); | |
196 sin.sin_family = AF_INET; | |
197 sin.sin_addr.s_addr = INADDR_ANY; | |
198 sin.sin_port = htons(PORT); | |
199 | |
200 prev_var = test_var; | |
201 bind(sd, (struct sockaddr *) &sin, sizeof(sin)); | |
202 assert(test_var - prev_var == 1); | |
203 | |
204 prev_var = test_var; | |
205 listen(sd, 5); | |
206 assert(test_var - prev_var == 1); | |
207 | |
208 addrlen = sizeof(pin); | |
209 prev_var = test_var; | |
210 sd_current = accept(sd, (struct sockaddr *) &pin, &addrlen); | |
211 assert(test_var - prev_var == 1); | |
212 | |
213 prev_var = test_var; | |
214 recv(sd_current, dir, sizeof(dir), 0); | |
215 assert(test_var - prev_var == 1); | |
216 | |
217 prev_var = test_var; | |
218 send(sd_current, dir, sizeof(dir), 0); | |
219 assert(test_var - prev_var == 1); | |
220 | |
221 prev_var = test_var; | |
222 sendto(sd_current, dir, sizeof(dir), 0, &sin, 0); | |
223 assert(test_var - prev_var == 1); | |
224 | |
225 prev_var = test_var; | |
226 recvfrom(sd_current, dir, sizeof(dir), 0, &sin, &addrlen); | |
227 assert(test_var - prev_var == 1); | |
228 | |
229 prev_var = test_var; | |
230 recvmsg(sd_current, &msg, 0); | |
231 assert(test_var - prev_var == 1); | |
232 | |
233 prev_var = test_var; | |
234 sendmsg(sd_current, &msg, 0); | |
235 assert(test_var - prev_var == 1); | |
236 | |
237 prev_var = test_var; | |
238 getsockopt(sd, 0, 0, dir, &addrlen); | |
239 assert(test_var - prev_var == 1); | |
240 | |
241 prev_var = test_var; | |
242 setsockopt(sd, 0, 0, dir, addrlen); | |
243 assert(test_var - prev_var == 1); | |
244 | |
245 prev_var = test_var; | |
246 getpeername(sd, &sin, &addrlen); | |
247 assert(test_var - prev_var == 1); | |
248 | |
249 prev_var = test_var; | |
250 getsockname(sd, &sin, &addrlen); | |
251 assert(test_var - prev_var == 1); | |
252 | |
253 prev_var = test_var; | |
254 epoll_create(0); | |
255 assert(test_var - prev_var == 1); | |
256 | |
257 prev_var = test_var; | |
258 epoll_ctl(0, 0, 0, &event); | |
259 assert(test_var - prev_var == 1); | |
260 | |
261 prev_var = test_var; | |
262 epoll_wait(0, &event, 0, 0); | |
263 assert(test_var - prev_var == 1); | |
264 | |
265 prev_var = test_var; | |
266 epoll_pwait(0, &event, 0, 0, &sigmask); | |
267 assert(test_var - prev_var == 1); | |
268 | |
269 prev_var = test_var; | |
270 poll(&pollfds, 0, 0); | |
271 assert(test_var - prev_var == 1); | |
272 | |
273 prev_var = test_var; | |
274 ppoll(&pollfds, 0, &timeout, &sigmask); | |
275 assert(test_var - prev_var == 1); | |
276 | |
277 return 0; | |
278 } | |
OLD | NEW |