xref: /freebsd/contrib/mandoc/test-wchar.c (revision 61d06d6bd19dafe8ea971dd43e8328fa1b473456)
1*61d06d6bSBaptiste Daroussin /*	$Id: test-wchar.c,v 1.4 2016/07/31 09:29:13 schwarze Exp $	*/
2*61d06d6bSBaptiste Daroussin /*
3*61d06d6bSBaptiste Daroussin  * Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
4*61d06d6bSBaptiste Daroussin  *
5*61d06d6bSBaptiste Daroussin  * Permission to use, copy, modify, and distribute this software for any
6*61d06d6bSBaptiste Daroussin  * purpose with or without fee is hereby granted, provided that the above
7*61d06d6bSBaptiste Daroussin  * copyright notice and this permission notice appear in all copies.
8*61d06d6bSBaptiste Daroussin  *
9*61d06d6bSBaptiste Daroussin  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*61d06d6bSBaptiste Daroussin  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*61d06d6bSBaptiste Daroussin  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*61d06d6bSBaptiste Daroussin  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*61d06d6bSBaptiste Daroussin  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*61d06d6bSBaptiste Daroussin  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*61d06d6bSBaptiste Daroussin  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*61d06d6bSBaptiste Daroussin  */
17*61d06d6bSBaptiste Daroussin 
18*61d06d6bSBaptiste Daroussin #if defined(__linux__) || defined(__MINT__)
19*61d06d6bSBaptiste Daroussin #define _GNU_SOURCE /* wcwidth() */
20*61d06d6bSBaptiste Daroussin #endif
21*61d06d6bSBaptiste Daroussin 
22*61d06d6bSBaptiste Daroussin #include <locale.h>
23*61d06d6bSBaptiste Daroussin #include <stdio.h>
24*61d06d6bSBaptiste Daroussin #include <wchar.h>
25*61d06d6bSBaptiste Daroussin #include <unistd.h>
26*61d06d6bSBaptiste Daroussin 
27*61d06d6bSBaptiste Daroussin int
28*61d06d6bSBaptiste Daroussin main(void)
29*61d06d6bSBaptiste Daroussin {
30*61d06d6bSBaptiste Daroussin 	wchar_t	 wc;
31*61d06d6bSBaptiste Daroussin 	int	 width;
32*61d06d6bSBaptiste Daroussin 
33*61d06d6bSBaptiste Daroussin 	if (setlocale(LC_ALL, "") == NULL) {
34*61d06d6bSBaptiste Daroussin 		fputs("setlocale(LC_ALL, \"\") failed\n", stderr);
35*61d06d6bSBaptiste Daroussin 		return 1;
36*61d06d6bSBaptiste Daroussin 	}
37*61d06d6bSBaptiste Daroussin 
38*61d06d6bSBaptiste Daroussin 	if (setlocale(LC_CTYPE, UTF8_LOCALE) == NULL) {
39*61d06d6bSBaptiste Daroussin 		fprintf(stderr, "setlocale(LC_CTYPE, \"%s\") failed\n",
40*61d06d6bSBaptiste Daroussin 		    UTF8_LOCALE);
41*61d06d6bSBaptiste Daroussin 		return 1;
42*61d06d6bSBaptiste Daroussin 	}
43*61d06d6bSBaptiste Daroussin 
44*61d06d6bSBaptiste Daroussin 	if (sizeof(wchar_t) < 4) {
45*61d06d6bSBaptiste Daroussin 		fprintf(stderr, "wchar_t is only %zu bytes\n",
46*61d06d6bSBaptiste Daroussin 		    sizeof(wchar_t));
47*61d06d6bSBaptiste Daroussin 		return 1;
48*61d06d6bSBaptiste Daroussin 	}
49*61d06d6bSBaptiste Daroussin 
50*61d06d6bSBaptiste Daroussin 	if ((width = wcwidth(L' ')) != 1) {
51*61d06d6bSBaptiste Daroussin 		fprintf(stderr, "wcwidth(L' ') returned %d\n", width);
52*61d06d6bSBaptiste Daroussin 		return 1;
53*61d06d6bSBaptiste Daroussin 	}
54*61d06d6bSBaptiste Daroussin 
55*61d06d6bSBaptiste Daroussin 	dup2(STDERR_FILENO, STDOUT_FILENO);
56*61d06d6bSBaptiste Daroussin 	wc = L'*';
57*61d06d6bSBaptiste Daroussin 	if (putwchar(wc) != (wint_t)wc) {
58*61d06d6bSBaptiste Daroussin 		fputs("bad putwchar return value\n", stderr);
59*61d06d6bSBaptiste Daroussin 		return 1;
60*61d06d6bSBaptiste Daroussin 	}
61*61d06d6bSBaptiste Daroussin 
62*61d06d6bSBaptiste Daroussin 	return 0;
63*61d06d6bSBaptiste Daroussin }
64