1*7295610fSBaptiste Daroussin /* $Id: test-wchar.c,v 1.5 2018/08/15 02:15:52 schwarze Exp $ */ 261d06d6bSBaptiste Daroussin /* 361d06d6bSBaptiste Daroussin * Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org> 461d06d6bSBaptiste Daroussin * 561d06d6bSBaptiste Daroussin * Permission to use, copy, modify, and distribute this software for any 661d06d6bSBaptiste Daroussin * purpose with or without fee is hereby granted, provided that the above 761d06d6bSBaptiste Daroussin * copyright notice and this permission notice appear in all copies. 861d06d6bSBaptiste Daroussin * 961d06d6bSBaptiste Daroussin * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1061d06d6bSBaptiste Daroussin * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1161d06d6bSBaptiste Daroussin * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1261d06d6bSBaptiste Daroussin * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1361d06d6bSBaptiste Daroussin * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1461d06d6bSBaptiste Daroussin * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1561d06d6bSBaptiste Daroussin * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1661d06d6bSBaptiste Daroussin */ 1761d06d6bSBaptiste Daroussin 1861d06d6bSBaptiste Daroussin #include <locale.h> 1961d06d6bSBaptiste Daroussin #include <stdio.h> 2061d06d6bSBaptiste Daroussin #include <wchar.h> 2161d06d6bSBaptiste Daroussin #include <unistd.h> 2261d06d6bSBaptiste Daroussin 2361d06d6bSBaptiste Daroussin int 2461d06d6bSBaptiste Daroussin main(void) 2561d06d6bSBaptiste Daroussin { 2661d06d6bSBaptiste Daroussin wchar_t wc; 2761d06d6bSBaptiste Daroussin int width; 2861d06d6bSBaptiste Daroussin 2961d06d6bSBaptiste Daroussin if (setlocale(LC_ALL, "") == NULL) { 3061d06d6bSBaptiste Daroussin fputs("setlocale(LC_ALL, \"\") failed\n", stderr); 3161d06d6bSBaptiste Daroussin return 1; 3261d06d6bSBaptiste Daroussin } 3361d06d6bSBaptiste Daroussin 3461d06d6bSBaptiste Daroussin if (setlocale(LC_CTYPE, UTF8_LOCALE) == NULL) { 3561d06d6bSBaptiste Daroussin fprintf(stderr, "setlocale(LC_CTYPE, \"%s\") failed\n", 3661d06d6bSBaptiste Daroussin UTF8_LOCALE); 3761d06d6bSBaptiste Daroussin return 1; 3861d06d6bSBaptiste Daroussin } 3961d06d6bSBaptiste Daroussin 4061d06d6bSBaptiste Daroussin if (sizeof(wchar_t) < 4) { 4161d06d6bSBaptiste Daroussin fprintf(stderr, "wchar_t is only %zu bytes\n", 4261d06d6bSBaptiste Daroussin sizeof(wchar_t)); 4361d06d6bSBaptiste Daroussin return 1; 4461d06d6bSBaptiste Daroussin } 4561d06d6bSBaptiste Daroussin 4661d06d6bSBaptiste Daroussin if ((width = wcwidth(L' ')) != 1) { 4761d06d6bSBaptiste Daroussin fprintf(stderr, "wcwidth(L' ') returned %d\n", width); 4861d06d6bSBaptiste Daroussin return 1; 4961d06d6bSBaptiste Daroussin } 5061d06d6bSBaptiste Daroussin 5161d06d6bSBaptiste Daroussin dup2(STDERR_FILENO, STDOUT_FILENO); 5261d06d6bSBaptiste Daroussin wc = L'*'; 5361d06d6bSBaptiste Daroussin if (putwchar(wc) != (wint_t)wc) { 5461d06d6bSBaptiste Daroussin fputs("bad putwchar return value\n", stderr); 5561d06d6bSBaptiste Daroussin return 1; 5661d06d6bSBaptiste Daroussin } 5761d06d6bSBaptiste Daroussin 5861d06d6bSBaptiste Daroussin return 0; 5961d06d6bSBaptiste Daroussin } 60