Annotation of embedaddon/libiconv/tests/table-to.c, revision 1.1
1.1 ! misho 1: /* Copyright (C) 2000-2002, 2004-2005 Free Software Foundation, Inc.
! 2: This file is part of the GNU LIBICONV Library.
! 3:
! 4: The GNU LIBICONV Library is free software; you can redistribute it
! 5: and/or modify it under the terms of the GNU Library General Public
! 6: License as published by the Free Software Foundation; either version 2
! 7: of the License, or (at your option) any later version.
! 8:
! 9: The GNU LIBICONV Library is distributed in the hope that it will be
! 10: useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
! 11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! 12: Library General Public License for more details.
! 13:
! 14: You should have received a copy of the GNU Library General Public
! 15: License along with the GNU LIBICONV Library; see the file COPYING.LIB.
! 16: If not, write to the Free Software Foundation, Inc., 51 Franklin Street,
! 17: Fifth Floor, Boston, MA 02110-1301, USA. */
! 18:
! 19: /* Create a table from Unicode to CHARSET. */
! 20:
! 21: #include "config.h"
! 22:
! 23: #include <stddef.h>
! 24: #include <stdio.h>
! 25: #include <stdlib.h>
! 26: #include <string.h>
! 27: #include <iconv.h>
! 28: #include <errno.h>
! 29:
! 30: #include "binary-io.h"
! 31:
! 32: int main (int argc, char* argv[])
! 33: {
! 34: const char* charset;
! 35: iconv_t cd;
! 36: int bmp_only;
! 37:
! 38: if (argc != 2) {
! 39: fprintf(stderr,"Usage: table-to charset\n");
! 40: exit(1);
! 41: }
! 42: charset = argv[1];
! 43:
! 44: #if O_BINARY
! 45: SET_BINARY(fileno(stdout));
! 46: #endif
! 47:
! 48: cd = iconv_open(charset,"UCS-4-INTERNAL");
! 49: if (cd == (iconv_t)(-1)) {
! 50: perror("iconv_open");
! 51: exit(1);
! 52: }
! 53:
! 54: /* When testing UTF-8, stop at 0x10000, otherwise the output file gets too
! 55: big. */
! 56: bmp_only = (strcmp(charset,"UTF-8") == 0);
! 57:
! 58: {
! 59: unsigned int i;
! 60: unsigned char buf[10];
! 61: for (i = 0; i < (bmp_only ? 0x10000 : 0x110000); i++) {
! 62: unsigned int in = i;
! 63: const char* inbuf = (const char*) ∈
! 64: size_t inbytesleft = sizeof(unsigned int);
! 65: char* outbuf = (char*)buf;
! 66: size_t outbytesleft = sizeof(buf);
! 67: size_t result;
! 68: size_t result2 = 0;
! 69: iconv(cd,NULL,NULL,NULL,NULL);
! 70: result = iconv(cd,(ICONV_CONST char**)&inbuf,&inbytesleft,&outbuf,&outbytesleft);
! 71: if (result != (size_t)(-1))
! 72: result2 = iconv(cd,NULL,NULL,&outbuf,&outbytesleft);
! 73: if (result == (size_t)(-1) || result2 == (size_t)(-1)) {
! 74: if (errno != EILSEQ) {
! 75: int saved_errno = errno;
! 76: fprintf(stderr,"0x%02X: iconv error: ",i);
! 77: errno = saved_errno;
! 78: perror("");
! 79: exit(1);
! 80: }
! 81: } else if (result == 0) /* ignore conversions with transliteration */ {
! 82: if (inbytesleft == 0 && outbytesleft < sizeof(buf)) {
! 83: unsigned int jmax = sizeof(buf) - outbytesleft;
! 84: unsigned int j;
! 85: printf("0x");
! 86: for (j = 0; j < jmax; j++)
! 87: printf("%02X",buf[j]);
! 88: printf("\t0x%04X\n",i);
! 89: } else if (inbytesleft == 0 && i >= 0xe0000 && i < 0xe0080) {
! 90: /* Language tags may silently be dropped. */
! 91: } else {
! 92: fprintf(stderr,"0x%02X: inbytes = %ld, outbytes = %ld\n",i,(long)(sizeof(unsigned int)-inbytesleft),(long)(sizeof(buf)-outbytesleft));
! 93: exit(1);
! 94: }
! 95: }
! 96: }
! 97: }
! 98:
! 99: if (iconv_close(cd) < 0) {
! 100: perror("iconv_close");
! 101: exit(1);
! 102: }
! 103:
! 104: if (ferror(stdin) || ferror(stdout) || fclose(stdout)) {
! 105: fprintf(stderr,"I/O error\n");
! 106: exit(1);
! 107: }
! 108:
! 109: exit(0);
! 110: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>