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*) &in;
        !            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>