xref: /freebsd/usr.sbin/rpc.lockd/test.c (revision ce81d24b059b0f258705d9a2daf15c306fb3a229)
1503d2aa8SPeter Wemm #include <rpc/rpc.h>
2503d2aa8SPeter Wemm #include <rpcsvc/nlm_prot.h>
3503d2aa8SPeter Wemm #ifndef lint
4503d2aa8SPeter Wemm /*static char sccsid[] = "from: @(#)nlm_prot.x 1.8 87/09/21 Copyr 1987 Sun Micro";*/
5503d2aa8SPeter Wemm /*static char sccsid[] = "from: * @(#)nlm_prot.x	2.1 88/08/01 4.0 RPCSRC";*/
6503d2aa8SPeter Wemm static char rcsid[] = "nlm_prot.x,v 1.1 1994/08/04 19:01:48 wollman Exp";
7503d2aa8SPeter Wemm #endif /* not lint */
8503d2aa8SPeter Wemm 
9503d2aa8SPeter Wemm /* Default timeout can be changed using clnt_control() */
10503d2aa8SPeter Wemm static struct timeval TIMEOUT = { 0, 0 };
11503d2aa8SPeter Wemm 
12503d2aa8SPeter Wemm nlm_testres *
13503d2aa8SPeter Wemm nlm_test_1(argp, clnt)
14503d2aa8SPeter Wemm 	struct nlm_testargs *argp;
15503d2aa8SPeter Wemm 	CLIENT *clnt;
16503d2aa8SPeter Wemm {
17503d2aa8SPeter Wemm 	static nlm_testres res;
18503d2aa8SPeter Wemm 
19503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
20503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_TEST, xdr_nlm_testargs, argp, xdr_nlm_testres, &res, TIMEOUT) != RPC_SUCCESS) {
21503d2aa8SPeter Wemm 		return (NULL);
22503d2aa8SPeter Wemm 	}
23503d2aa8SPeter Wemm 	return (&res);
24503d2aa8SPeter Wemm }
25503d2aa8SPeter Wemm 
26503d2aa8SPeter Wemm 
27503d2aa8SPeter Wemm nlm_res *
28503d2aa8SPeter Wemm nlm_lock_1(argp, clnt)
29503d2aa8SPeter Wemm 	struct nlm_lockargs *argp;
30503d2aa8SPeter Wemm 	CLIENT *clnt;
31503d2aa8SPeter Wemm {
32503d2aa8SPeter Wemm 	enum clnt_stat st;
33503d2aa8SPeter Wemm 	static nlm_res res;
34503d2aa8SPeter Wemm 
35503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
36503d2aa8SPeter Wemm 	if (st = clnt_call(clnt, NLM_LOCK, xdr_nlm_lockargs, argp, xdr_nlm_res, &res, TIMEOUT) != RPC_SUCCESS) {
37503d2aa8SPeter Wemm 		printf("clnt_call returns %d\n", st);
38503d2aa8SPeter Wemm 		clnt_perror(clnt, "humbug");
39503d2aa8SPeter Wemm 		return (NULL);
40503d2aa8SPeter Wemm 	}
41503d2aa8SPeter Wemm 	return (&res);
42503d2aa8SPeter Wemm }
43503d2aa8SPeter Wemm 
44503d2aa8SPeter Wemm 
45503d2aa8SPeter Wemm nlm_res *
46503d2aa8SPeter Wemm nlm_cancel_1(argp, clnt)
47503d2aa8SPeter Wemm 	struct nlm_cancargs *argp;
48503d2aa8SPeter Wemm 	CLIENT *clnt;
49503d2aa8SPeter Wemm {
50503d2aa8SPeter Wemm 	static nlm_res res;
51503d2aa8SPeter Wemm 
52503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
53503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_CANCEL, xdr_nlm_cancargs, argp, xdr_nlm_res, &res, TIMEOUT) != RPC_SUCCESS) {
54503d2aa8SPeter Wemm 		return (NULL);
55503d2aa8SPeter Wemm 	}
56503d2aa8SPeter Wemm 	return (&res);
57503d2aa8SPeter Wemm }
58503d2aa8SPeter Wemm 
59503d2aa8SPeter Wemm 
60503d2aa8SPeter Wemm nlm_res *
61503d2aa8SPeter Wemm nlm_unlock_1(argp, clnt)
62503d2aa8SPeter Wemm 	struct nlm_unlockargs *argp;
63503d2aa8SPeter Wemm 	CLIENT *clnt;
64503d2aa8SPeter Wemm {
65503d2aa8SPeter Wemm 	static nlm_res res;
66503d2aa8SPeter Wemm 
67503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
68503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_UNLOCK, xdr_nlm_unlockargs, argp, xdr_nlm_res, &res, TIMEOUT) != RPC_SUCCESS) {
69503d2aa8SPeter Wemm 		return (NULL);
70503d2aa8SPeter Wemm 	}
71503d2aa8SPeter Wemm 	return (&res);
72503d2aa8SPeter Wemm }
73503d2aa8SPeter Wemm 
74503d2aa8SPeter Wemm 
75503d2aa8SPeter Wemm nlm_res *
76503d2aa8SPeter Wemm nlm_granted_1(argp, clnt)
77503d2aa8SPeter Wemm 	struct nlm_testargs *argp;
78503d2aa8SPeter Wemm 	CLIENT *clnt;
79503d2aa8SPeter Wemm {
80503d2aa8SPeter Wemm 	static nlm_res res;
81503d2aa8SPeter Wemm 
82503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
83503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_GRANTED, xdr_nlm_testargs, argp, xdr_nlm_res, &res, TIMEOUT) != RPC_SUCCESS) {
84503d2aa8SPeter Wemm 		return (NULL);
85503d2aa8SPeter Wemm 	}
86503d2aa8SPeter Wemm 	return (&res);
87503d2aa8SPeter Wemm }
88503d2aa8SPeter Wemm 
89503d2aa8SPeter Wemm 
90503d2aa8SPeter Wemm void *
91503d2aa8SPeter Wemm nlm_test_msg_1(argp, clnt)
92503d2aa8SPeter Wemm 	struct nlm_testargs *argp;
93503d2aa8SPeter Wemm 	CLIENT *clnt;
94503d2aa8SPeter Wemm {
95503d2aa8SPeter Wemm 	static char res;
96503d2aa8SPeter Wemm 
97503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
98503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_TEST_MSG, xdr_nlm_testargs, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
99503d2aa8SPeter Wemm 		return (NULL);
100503d2aa8SPeter Wemm 	}
101503d2aa8SPeter Wemm 	return ((void *)&res);
102503d2aa8SPeter Wemm }
103503d2aa8SPeter Wemm 
104503d2aa8SPeter Wemm 
105503d2aa8SPeter Wemm void *
106503d2aa8SPeter Wemm nlm_lock_msg_1(argp, clnt)
107503d2aa8SPeter Wemm 	struct nlm_lockargs *argp;
108503d2aa8SPeter Wemm 	CLIENT *clnt;
109503d2aa8SPeter Wemm {
110503d2aa8SPeter Wemm 	static char res;
111503d2aa8SPeter Wemm 
112503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
113503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_LOCK_MSG, xdr_nlm_lockargs, argp, xdr_void, NULL, TIMEOUT) != RPC_SUCCESS) {
114503d2aa8SPeter Wemm 		clnt_perror(clnt, "nlm_lock_msg_1");
115503d2aa8SPeter Wemm 		return (NULL);
116503d2aa8SPeter Wemm 	}
117503d2aa8SPeter Wemm 	return ((void *)&res);
118503d2aa8SPeter Wemm }
119503d2aa8SPeter Wemm 
120503d2aa8SPeter Wemm 
121503d2aa8SPeter Wemm void *
122503d2aa8SPeter Wemm nlm_cancel_msg_1(argp, clnt)
123503d2aa8SPeter Wemm 	struct nlm_cancargs *argp;
124503d2aa8SPeter Wemm 	CLIENT *clnt;
125503d2aa8SPeter Wemm {
126503d2aa8SPeter Wemm 	static char res;
127503d2aa8SPeter Wemm 
128503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
129503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_CANCEL_MSG, xdr_nlm_cancargs, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
130503d2aa8SPeter Wemm 		return (NULL);
131503d2aa8SPeter Wemm 	}
132503d2aa8SPeter Wemm 	return ((void *)&res);
133503d2aa8SPeter Wemm }
134503d2aa8SPeter Wemm 
135503d2aa8SPeter Wemm 
136503d2aa8SPeter Wemm void *
137503d2aa8SPeter Wemm nlm_unlock_msg_1(argp, clnt)
138503d2aa8SPeter Wemm 	struct nlm_unlockargs *argp;
139503d2aa8SPeter Wemm 	CLIENT *clnt;
140503d2aa8SPeter Wemm {
141503d2aa8SPeter Wemm 	static char res;
142503d2aa8SPeter Wemm 
143503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
144503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_UNLOCK_MSG, xdr_nlm_unlockargs, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
145503d2aa8SPeter Wemm 		return (NULL);
146503d2aa8SPeter Wemm 	}
147503d2aa8SPeter Wemm 	return ((void *)&res);
148503d2aa8SPeter Wemm }
149503d2aa8SPeter Wemm 
150503d2aa8SPeter Wemm 
151503d2aa8SPeter Wemm void *
152503d2aa8SPeter Wemm nlm_granted_msg_1(argp, clnt)
153503d2aa8SPeter Wemm 	struct nlm_testargs *argp;
154503d2aa8SPeter Wemm 	CLIENT *clnt;
155503d2aa8SPeter Wemm {
156503d2aa8SPeter Wemm 	static char res;
157503d2aa8SPeter Wemm 
158503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
159503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_GRANTED_MSG, xdr_nlm_testargs, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
160503d2aa8SPeter Wemm 		return (NULL);
161503d2aa8SPeter Wemm 	}
162503d2aa8SPeter Wemm 	return ((void *)&res);
163503d2aa8SPeter Wemm }
164503d2aa8SPeter Wemm 
165503d2aa8SPeter Wemm 
166503d2aa8SPeter Wemm void *
167503d2aa8SPeter Wemm nlm_test_res_1(argp, clnt)
168503d2aa8SPeter Wemm 	nlm_testres *argp;
169503d2aa8SPeter Wemm 	CLIENT *clnt;
170503d2aa8SPeter Wemm {
171503d2aa8SPeter Wemm 	static char res;
172503d2aa8SPeter Wemm 
173503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
174503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_TEST_RES, xdr_nlm_testres, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
175503d2aa8SPeter Wemm 		return (NULL);
176503d2aa8SPeter Wemm 	}
177503d2aa8SPeter Wemm 	return ((void *)&res);
178503d2aa8SPeter Wemm }
179503d2aa8SPeter Wemm 
180503d2aa8SPeter Wemm 
181503d2aa8SPeter Wemm void *
182503d2aa8SPeter Wemm nlm_lock_res_1(argp, clnt)
183503d2aa8SPeter Wemm 	nlm_res *argp;
184503d2aa8SPeter Wemm 	CLIENT *clnt;
185503d2aa8SPeter Wemm {
186503d2aa8SPeter Wemm 	static char res;
187503d2aa8SPeter Wemm 
188503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
189503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_LOCK_RES, xdr_nlm_res, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
190503d2aa8SPeter Wemm 		return (NULL);
191503d2aa8SPeter Wemm 	}
192503d2aa8SPeter Wemm 	return ((void *)&res);
193503d2aa8SPeter Wemm }
194503d2aa8SPeter Wemm 
195503d2aa8SPeter Wemm 
196503d2aa8SPeter Wemm void *
197503d2aa8SPeter Wemm nlm_cancel_res_1(argp, clnt)
198503d2aa8SPeter Wemm 	nlm_res *argp;
199503d2aa8SPeter Wemm 	CLIENT *clnt;
200503d2aa8SPeter Wemm {
201503d2aa8SPeter Wemm 	static char res;
202503d2aa8SPeter Wemm 
203503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
204503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_CANCEL_RES, xdr_nlm_res, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
205503d2aa8SPeter Wemm 		return (NULL);
206503d2aa8SPeter Wemm 	}
207503d2aa8SPeter Wemm 	return ((void *)&res);
208503d2aa8SPeter Wemm }
209503d2aa8SPeter Wemm 
210503d2aa8SPeter Wemm 
211503d2aa8SPeter Wemm void *
212503d2aa8SPeter Wemm nlm_unlock_res_1(argp, clnt)
213503d2aa8SPeter Wemm 	nlm_res *argp;
214503d2aa8SPeter Wemm 	CLIENT *clnt;
215503d2aa8SPeter Wemm {
216503d2aa8SPeter Wemm 	static char res;
217503d2aa8SPeter Wemm 
218503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
219503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_UNLOCK_RES, xdr_nlm_res, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
220503d2aa8SPeter Wemm 		return (NULL);
221503d2aa8SPeter Wemm 	}
222503d2aa8SPeter Wemm 	return ((void *)&res);
223503d2aa8SPeter Wemm }
224503d2aa8SPeter Wemm 
225503d2aa8SPeter Wemm 
226503d2aa8SPeter Wemm void *
227503d2aa8SPeter Wemm nlm_granted_res_1(argp, clnt)
228503d2aa8SPeter Wemm 	nlm_res *argp;
229503d2aa8SPeter Wemm 	CLIENT *clnt;
230503d2aa8SPeter Wemm {
231503d2aa8SPeter Wemm 	static char res;
232503d2aa8SPeter Wemm 
233503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
234503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_GRANTED_RES, xdr_nlm_res, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
235503d2aa8SPeter Wemm 		return (NULL);
236503d2aa8SPeter Wemm 	}
237503d2aa8SPeter Wemm 	return ((void *)&res);
238503d2aa8SPeter Wemm }
239503d2aa8SPeter Wemm 
240503d2aa8SPeter Wemm 
241503d2aa8SPeter Wemm nlm_shareres *
242503d2aa8SPeter Wemm nlm_share_3(argp, clnt)
243503d2aa8SPeter Wemm 	nlm_shareargs *argp;
244503d2aa8SPeter Wemm 	CLIENT *clnt;
245503d2aa8SPeter Wemm {
246503d2aa8SPeter Wemm 	static nlm_shareres res;
247503d2aa8SPeter Wemm 
248503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
249503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_SHARE, xdr_nlm_shareargs, argp, xdr_nlm_shareres, &res, TIMEOUT) != RPC_SUCCESS) {
250503d2aa8SPeter Wemm 		return (NULL);
251503d2aa8SPeter Wemm 	}
252503d2aa8SPeter Wemm 	return (&res);
253503d2aa8SPeter Wemm }
254503d2aa8SPeter Wemm 
255503d2aa8SPeter Wemm 
256503d2aa8SPeter Wemm nlm_shareres *
257503d2aa8SPeter Wemm nlm_unshare_3(argp, clnt)
258503d2aa8SPeter Wemm 	nlm_shareargs *argp;
259503d2aa8SPeter Wemm 	CLIENT *clnt;
260503d2aa8SPeter Wemm {
261503d2aa8SPeter Wemm 	static nlm_shareres res;
262503d2aa8SPeter Wemm 
263503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
264503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_UNSHARE, xdr_nlm_shareargs, argp, xdr_nlm_shareres, &res, TIMEOUT) != RPC_SUCCESS) {
265503d2aa8SPeter Wemm 		return (NULL);
266503d2aa8SPeter Wemm 	}
267503d2aa8SPeter Wemm 	return (&res);
268503d2aa8SPeter Wemm }
269503d2aa8SPeter Wemm 
270503d2aa8SPeter Wemm 
271503d2aa8SPeter Wemm nlm_res *
272503d2aa8SPeter Wemm nlm_nm_lock_3(argp, clnt)
273503d2aa8SPeter Wemm 	nlm_lockargs *argp;
274503d2aa8SPeter Wemm 	CLIENT *clnt;
275503d2aa8SPeter Wemm {
276503d2aa8SPeter Wemm 	static nlm_res res;
277503d2aa8SPeter Wemm 
278503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
279503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_NM_LOCK, xdr_nlm_lockargs, argp, xdr_nlm_res, &res, TIMEOUT) != RPC_SUCCESS) {
280503d2aa8SPeter Wemm 		return (NULL);
281503d2aa8SPeter Wemm 	}
282503d2aa8SPeter Wemm 	return (&res);
283503d2aa8SPeter Wemm }
284503d2aa8SPeter Wemm 
285503d2aa8SPeter Wemm 
286503d2aa8SPeter Wemm void *
287503d2aa8SPeter Wemm nlm_free_all_3(argp, clnt)
288503d2aa8SPeter Wemm 	nlm_notify *argp;
289503d2aa8SPeter Wemm 	CLIENT *clnt;
290503d2aa8SPeter Wemm {
291503d2aa8SPeter Wemm 	static char res;
292503d2aa8SPeter Wemm 
293503d2aa8SPeter Wemm 	bzero((char *)&res, sizeof(res));
294503d2aa8SPeter Wemm 	if (clnt_call(clnt, NLM_FREE_ALL, xdr_nlm_notify, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
295503d2aa8SPeter Wemm 		return (NULL);
296503d2aa8SPeter Wemm 	}
297503d2aa8SPeter Wemm 	return ((void *)&res);
298503d2aa8SPeter Wemm }
299503d2aa8SPeter Wemm 
300503d2aa8SPeter Wemm 
301503d2aa8SPeter Wemm int main(int argc, char **argv)
302503d2aa8SPeter Wemm {
303503d2aa8SPeter Wemm   CLIENT *cli;
304503d2aa8SPeter Wemm   nlm_res res_block;
305503d2aa8SPeter Wemm   nlm_res *out;
306503d2aa8SPeter Wemm   nlm_lockargs arg;
307503d2aa8SPeter Wemm   struct timeval tim;
308503d2aa8SPeter Wemm 
309503d2aa8SPeter Wemm   printf("Creating client for host %s\n", argv[1]);
310503d2aa8SPeter Wemm   cli = clnt_create(argv[1], NLM_PROG, NLM_VERS, "udp");
311503d2aa8SPeter Wemm   if (!cli)
312503d2aa8SPeter Wemm   {
313503d2aa8SPeter Wemm     printf("Failed to create client\n");
314503d2aa8SPeter Wemm     exit(1);
315503d2aa8SPeter Wemm   }
316503d2aa8SPeter Wemm 
317ce81d24bSPeter Wemm 
318503d2aa8SPeter Wemm   clnt_control(cli, CLGET_TIMEOUT, &tim);
319503d2aa8SPeter Wemm   printf("Default timeout was %d.%d\n", tim.tv_sec, tim.tv_usec);
320503d2aa8SPeter Wemm   tim.tv_usec = -1;
321503d2aa8SPeter Wemm   tim.tv_sec = -1;
322503d2aa8SPeter Wemm   clnt_control(cli, CLSET_TIMEOUT, &tim);
323ce81d24bSPeter Wemm   clnt_control(cli, CLGET_TIMEOUT, &tim);
324ce81d24bSPeter Wemm   printf("timeout now %d.%d\n", tim.tv_sec, tim.tv_usec);
325ce81d24bSPeter Wemm 
326503d2aa8SPeter Wemm 
327503d2aa8SPeter Wemm   arg.cookie.n_len = 4;
328503d2aa8SPeter Wemm   arg.cookie.n_bytes = "hello";
329503d2aa8SPeter Wemm   arg.block = 0;
330503d2aa8SPeter Wemm   arg.exclusive = 0;
331503d2aa8SPeter Wemm   arg.reclaim = 0;
332503d2aa8SPeter Wemm   arg.state = 0x1234;
333503d2aa8SPeter Wemm   arg.alock.caller_name = "localhost";
334503d2aa8SPeter Wemm   arg.alock.fh.n_len = 32;
335503d2aa8SPeter Wemm   arg.alock.fh.n_bytes = "\x04\x04\x02\x00\x01\x00\x00\x00\x0c\x00\x00\x00\xff\xff\xff\xd0\x16\x00\x00\x5b\x7c\xff\xff\xff\xec\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x54\xef\xbf\xd7\x94";
336503d2aa8SPeter Wemm   arg.alock.oh.n_len = 8;
337503d2aa8SPeter Wemm   arg.alock.oh.n_bytes = "\x00\x00\x02\xff\xff\xff\xd3";
338503d2aa8SPeter Wemm   arg.alock.svid = 0x5678;
339503d2aa8SPeter Wemm   arg.alock.l_offset = 0;
340503d2aa8SPeter Wemm   arg.alock.l_len = 100;
341503d2aa8SPeter Wemm 
342503d2aa8SPeter Wemm   res_block.stat.stat = nlm_granted;
343503d2aa8SPeter Wemm   res_block.cookie.n_bytes = "hello";
344503d2aa8SPeter Wemm   res_block.cookie.n_len = 5;
345503d2aa8SPeter Wemm 
346503d2aa8SPeter Wemm #if 0
347503d2aa8SPeter Wemm   if (nlm_lock_res_1(&res_block, cli)) printf("Success!\n");
348503d2aa8SPeter Wemm   else printf("Fail\n");
349503d2aa8SPeter Wemm #else
350503d2aa8SPeter Wemm   if (out = nlm_lock_msg_1(&arg, cli))
351503d2aa8SPeter Wemm   {
352503d2aa8SPeter Wemm     printf("Success!\n");
353503d2aa8SPeter Wemm     printf("out->stat = %d", out->stat);
354503d2aa8SPeter Wemm   }
355503d2aa8SPeter Wemm   else
356503d2aa8SPeter Wemm   {
357503d2aa8SPeter Wemm     printf("Fail\n");
358503d2aa8SPeter Wemm   }
359503d2aa8SPeter Wemm #endif
360503d2aa8SPeter Wemm 
361503d2aa8SPeter Wemm   return 0;
362503d2aa8SPeter Wemm }
363