1 /* $OpenBSD: strerror_test.c,v 1.4 2005/05/13 07:06:20 otto Exp $ */
2 /*
3  * Copyright (c) 2004 Marc Espie <espie@cvs.openbsd.org>
4  *
5  * Permission to use, copy, modify, and distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17 #include <signal.h>
18 #include <string.h>
19 #include <stdio.h>
20 #include <limits.h>
21 #include <errno.h>
22 
23 void
24 check_strerror_r(int val)
25 {
26 	char buffer[NL_TEXTMAX + 1];
27 	int i, r;
28 
29 	memset(buffer, 'X', sizeof(buffer) - 1);
30 	buffer[sizeof(buffer) - 1] = '\0';
31 	(void)strerror_r(val, NULL, 0);	/* XXX */
32 	for (i = 0; i < 25; i++) {
33 		r = strerror_r(val, buffer, i);
34 		printf("%d %d %zu: %s\n", i, r, strlen(buffer), buffer);
35 	}
36 }
37 
38 void
39 check_strsignal(int val)
40 {
41 	char buffer[NL_TEXTMAX + 1];
42 	int i, r;
43 
44 	memset(buffer, 'X', sizeof(buffer) - 1);
45 	buffer[sizeof(buffer) - 1] = '\0';
46 	(void)__strsignal(val, buffer);
47 	printf("%s\n", buffer);
48 }
49 
50 int
51 main()
52 {
53 	printf("%s\n", strerror(21345));
54 	printf("%s\n", strerror(-21345));
55 	printf("%s\n", strerror(0));
56 	printf("%s\n", strerror(INT_MAX));
57 	printf("%s\n", strerror(INT_MIN));
58 	printf("%s\n", strerror(EPERM));
59 	check_strerror_r(EPERM);
60 	check_strerror_r(21345);
61 	check_strsignal(-1);
62 	check_strsignal(0);
63 	check_strsignal(10);
64 	check_strsignal(NSIG-1);
65 	check_strsignal(NSIG);
66 	check_strsignal(100);
67 	check_strsignal(INT_MAX);
68 	check_strsignal(INT_MIN);
69 	check_strsignal(UINT_MAX);
70 	return 0;
71 }
72