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