This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
bugs in CP1258 converter (3)
- To: libc-alpha at sources dot redhat dot com
- Subject: bugs in CP1258 converter (3)
- From: Bruno Haible <haible at ilog dot fr>
- Date: Tue, 15 May 2001 15:25:54 +0200 (CEST)
Here comes the CP1258 converter proper, plus some bits of testsuite, and
new files (appended uuencoded tar.gz at the end of this mail).
The cp1258.c is rewritten to do composition in the FROM_DIRECTION and
partial decomposition in the TO_DIRECTION. The composition/decomposition
tables are specific to this particular encoding, much smaller than the
full Unicode composition/decomposition tables (e.g. no Greek characters).
The tst-table-from test is adapted to this stateful converter. Its results
then match the CP1258 charmap. Only the tst-table-to test now exhibits
a different result than before: many new entries, which are normal (due
to the decomposition).
2001-05-14 Bruno Haible <haible@clisp.cons.org>
* iconvdata/cp1258.c: Completely rewritten.
* iconvdata/Makefile (gen-8bit-gap-modules): Remove cp1258.
* iconvdata/testdata/WINDOWS-1258: New file.
* iconvdata/testdata/WINDOWS-1258..UTF8: New file.
* iconvdata/TESTS: Add WINDOWS-1258 test.
* iconvdata/tst-table-from.c (try): Reset the iconv descriptor before
the main call, and flush it afterwards.
(utf8_decode): Return a string, possibly containing several Unicode
characters.
(main): Update all utf8_decode calls.
* iconvdata/CP1258.irreversible: New file.
*** glibc-20010430/iconvdata/cp1258.c.bak Tue Sep 7 16:49:57 1999
--- glibc-20010430/iconvdata/cp1258.c Mon May 14 13:04:31 2001
***************
*** 1,7 ****
/* Conversion from and to CP1258.
! Copyright (C) 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
! Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
--- 1,8 ----
/* Conversion from and to CP1258.
! Copyright (C) 1998, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
! Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998,
! and Bruno Haible <haible@clisp.cons.org>, 2001.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
***************
*** 18,29 ****
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <stdint.h>
! /* Get the conversion table. */
! #define TABLES <cp1258.h>
- #define CHARSET_NAME "CP1258//"
- #define HAS_HOLES 1 /* Not all 256 character are defined. */
! #include <8bit-gap.c>
--- 19,858 ----
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+ #include <dlfcn.h>
#include <stdint.h>
+ #include <assert.h>
! /* Definitions used in the body of the `gconv' function. */
! #define CHARSET_NAME "CP1258//"
! #define FROM_LOOP from_cp1258
! #define TO_LOOP to_cp1258
! #define DEFINE_INIT 1
! #define DEFINE_FINI 1
! #define MIN_NEEDED_FROM 1
! #define MAX_NEEDED_FROM 1
! #define MIN_NEEDED_TO 4
! #define MAX_NEEDED_TO 4
! #define PREPARE_LOOP \
! int saved_state; \
! int *statep = &data->__statep->__count;
! #define EXTRA_LOOP_ARGS , statep
! /* Since we might have to reset input pointer we must be able to save
! and restore the state. */
! #define SAVE_RESET_STATE(Save) \
! if (Save) \
! saved_state = *statep; \
! else \
! *statep = saved_state
!
!
! /* During CP1258 to UCS4 conversion, the COUNT element of the state
! contains the last UCS4 character, shifted by 3 bits. */
!
!
! /* Since this is a stateful encoding we have to provide code which resets
! the output state to the initial state. This has to be done during the
! flushing. */
! #define EMIT_SHIFT_TO_INIT \
! if (data->__statep->__count != 0) \
! { \
! if (FROM_DIRECTION) \
! { \
! if (__builtin_expect (outbuf + 4 <= outend, 1)) \
! { \
! /* Write out the last character. */ \
! *((uint32_t *) outbuf)++ = data->__statep->__count >> 3; \
! data->__statep->__count = 0; \
! } \
! else \
! /* We don't have enough room in the output buffer. */ \
! status = __GCONV_FULL_OUTPUT; \
! } \
! else \
! /* We don't use shift states in the TO_DIRECTION. */ \
! data->__statep->__count = 0; \
! }
!
!
! /* First define the conversion function from CP1258 to UCS4. */
!
! static const uint16_t to_ucs4[128] = {
! /* 0x80 */
! 0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
! 0x02C6, 0x2030, 0, 0x2039, 0x0152, 0, 0, 0,
! /* 0x90 */
! 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
! 0x02DC, 0x2122, 0, 0x203A, 0x0153, 0, 0, 0x0178,
! /* 0xA0 */
! 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
! 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
! /* 0xB0 */
! 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
! 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
! /* 0xC0 */
! 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
! 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x0300, 0x00CD, 0x00CE, 0x00CF,
! /* 0xD0 */
! 0x0110, 0x00D1, 0x0309, 0x00D3, 0x00D4, 0x01A0, 0x00D6, 0x00D7,
! 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x01AF, 0x0303, 0x00DF,
! /* 0xE0 */
! 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
! 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0301, 0x00ED, 0x00EE, 0x00EF,
! /* 0xF0 */
! 0x0111, 0x00F1, 0x0323, 0x00F3, 0x00F4, 0x01A1, 0x00F6, 0x00F7,
! 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF,
! };
!
! /* CP1258 contains five combining characters:
! 0x0300, 0x0301, 0x0303, 0x0309, 0x0323. */
!
! /* Composition tables for each of the relevant combining characters. */
! static const struct {
! uint16_t base;
! uint16_t composed;
! } comp_table_data[] = {
! #define COMP_TABLE_IDX_0300 0
! #define COMP_TABLE_LEN_0300 31
! { 0x0041, 0x00C0 },
! { 0x0045, 0x00C8 },
! { 0x0049, 0x00CC },
! { 0x004E, 0x01F8 },
! { 0x004F, 0x00D2 },
! { 0x0055, 0x00D9 },
! { 0x0057, 0x1E80 },
! { 0x0059, 0x1EF2 },
! { 0x0061, 0x00E0 },
! { 0x0065, 0x00E8 },
! { 0x0069, 0x00EC },
! { 0x006E, 0x01F9 },
! { 0x006F, 0x00F2 },
! { 0x0075, 0x00F9 },
! { 0x0077, 0x1E81 },
! { 0x0079, 0x1EF3 },
! { 0x00A8, 0x1FED },
! { 0x00C2, 0x1EA6 },
! { 0x00CA, 0x1EC0 },
! { 0x00D4, 0x1ED2 },
! { 0x00DC, 0x01DB },
! { 0x00E2, 0x1EA7 },
! { 0x00EA, 0x1EC1 },
! { 0x00F4, 0x1ED3 },
! { 0x00FC, 0x01DC },
! { 0x0102, 0x1EB0 },
! { 0x0103, 0x1EB1 },
! /*{ 0x0112, 0x1E14 },*/
! /*{ 0x0113, 0x1E15 },*/
! /*{ 0x014C, 0x1E50 },*/
! /*{ 0x014D, 0x1E51 },*/
! { 0x01A0, 0x1EDC },
! { 0x01A1, 0x1EDD },
! { 0x01AF, 0x1EEA },
! { 0x01B0, 0x1EEB },
! #define COMP_TABLE_IDX_0301 (COMP_TABLE_IDX_0300 + COMP_TABLE_LEN_0300)
! #define COMP_TABLE_LEN_0301 60
! { 0x0041, 0x00C1 },
! { 0x0043, 0x0106 },
! { 0x0045, 0x00C9 },
! { 0x0047, 0x01F4 },
! { 0x0049, 0x00CD },
! { 0x004B, 0x1E30 },
! { 0x004C, 0x0139 },
! { 0x004D, 0x1E3E },
! { 0x004E, 0x0143 },
! { 0x004F, 0x00D3 },
! { 0x0050, 0x1E54 },
! { 0x0052, 0x0154 },
! { 0x0053, 0x015A },
! { 0x0055, 0x00DA },
! { 0x0057, 0x1E82 },
! { 0x0059, 0x00DD },
! { 0x005A, 0x0179 },
! { 0x0061, 0x00E1 },
! { 0x0063, 0x0107 },
! { 0x0065, 0x00E9 },
! { 0x0067, 0x01F5 },
! { 0x0069, 0x00ED },
! { 0x006B, 0x1E31 },
! { 0x006C, 0x013A },
! { 0x006D, 0x1E3F },
! { 0x006E, 0x0144 },
! { 0x006F, 0x00F3 },
! { 0x0070, 0x1E55 },
! { 0x0072, 0x0155 },
! { 0x0073, 0x015B },
! { 0x0075, 0x00FA },
! { 0x0077, 0x1E83 },
! { 0x0079, 0x00FD },
! { 0x007A, 0x017A },
! { 0x00A5, 0x0385 },
! { 0x00A8, 0x1FEE },
! { 0x00C2, 0x1EA4 },
! { 0x00C5, 0x01FA },
! { 0x00C6, 0x01FC },
! { 0x00C7, 0x1E08 },
! { 0x00CA, 0x1EBE },
! { 0x00CF, 0x1E2E },
! { 0x00D4, 0x1ED0 },
! /*{ 0x00D5, 0x1E4C },*/
! { 0x00D8, 0x01FE },
! { 0x00DC, 0x01D7 },
! { 0x00E2, 0x1EA5 },
! { 0x00E5, 0x01FB },
! { 0x00E6, 0x01FD },
! { 0x00E7, 0x1E09 },
! { 0x00EA, 0x1EBF },
! { 0x00EF, 0x1E2F },
! { 0x00F4, 0x1ED1 },
! /*{ 0x00F5, 0x1E4D },*/
! { 0x00F8, 0x01FF },
! { 0x00FC, 0x01D8 },
! { 0x0102, 0x1EAE },
! { 0x0103, 0x1EAF },
! /*{ 0x0112, 0x1E16 },*/
! /*{ 0x0113, 0x1E17 },*/
! /*{ 0x014C, 0x1E52 },*/
! /*{ 0x014D, 0x1E53 },*/
! /*{ 0x0168, 0x1E78 },*/
! /*{ 0x0169, 0x1E79 },*/
! { 0x01A0, 0x1EDA },
! { 0x01A1, 0x1EDB },
! { 0x01AF, 0x1EE8 },
! { 0x01B0, 0x1EE9 },
! #define COMP_TABLE_IDX_0303 (COMP_TABLE_IDX_0301 + COMP_TABLE_LEN_0301)
! #define COMP_TABLE_LEN_0303 34
! { 0x0041, 0x00C3 },
! { 0x0045, 0x1EBC },
! { 0x0049, 0x0128 },
! { 0x004E, 0x00D1 },
! { 0x004F, 0x00D5 },
! { 0x0055, 0x0168 },
! { 0x0056, 0x1E7C },
! { 0x0059, 0x1EF8 },
! { 0x0061, 0x00E3 },
! { 0x0065, 0x1EBD },
! { 0x0069, 0x0129 },
! { 0x006E, 0x00F1 },
! { 0x006F, 0x00F5 },
! { 0x0075, 0x0169 },
! { 0x0076, 0x1E7D },
! { 0x0079, 0x1EF9 },
! { 0x00C2, 0x1EAA },
! { 0x00CA, 0x1EC4 },
! { 0x00D3, 0x1E4C },
! { 0x00D4, 0x1ED6 },
! { 0x00D6, 0x1E4E },
! { 0x00DA, 0x1E78 },
! { 0x00E2, 0x1EAB },
! { 0x00EA, 0x1EC5 },
! { 0x00F3, 0x1E4D },
! { 0x00F4, 0x1ED7 },
! { 0x00F6, 0x1E4F },
! { 0x00FA, 0x1E79 },
! { 0x0102, 0x1EB4 },
! { 0x0103, 0x1EB5 },
! { 0x01A0, 0x1EE0 },
! { 0x01A1, 0x1EE1 },
! { 0x01AF, 0x1EEE },
! { 0x01B0, 0x1EEF },
! #define COMP_TABLE_IDX_0309 (COMP_TABLE_IDX_0303 + COMP_TABLE_LEN_0303)
! #define COMP_TABLE_LEN_0309 24
! { 0x0041, 0x1EA2 },
! { 0x0045, 0x1EBA },
! { 0x0049, 0x1EC8 },
! { 0x004F, 0x1ECE },
! { 0x0055, 0x1EE6 },
! { 0x0059, 0x1EF6 },
! { 0x0061, 0x1EA3 },
! { 0x0065, 0x1EBB },
! { 0x0069, 0x1EC9 },
! { 0x006F, 0x1ECF },
! { 0x0075, 0x1EE7 },
! { 0x0079, 0x1EF7 },
! { 0x00C2, 0x1EA8 },
! { 0x00CA, 0x1EC2 },
! { 0x00D4, 0x1ED4 },
! { 0x00E2, 0x1EA9 },
! { 0x00EA, 0x1EC3 },
! { 0x00F4, 0x1ED5 },
! { 0x0102, 0x1EB2 },
! { 0x0103, 0x1EB3 },
! { 0x01A0, 0x1EDE },
! { 0x01A1, 0x1EDF },
! { 0x01AF, 0x1EEC },
! { 0x01B0, 0x1EED },
! #define COMP_TABLE_IDX_0323 (COMP_TABLE_IDX_0309 + COMP_TABLE_LEN_0309)
! #define COMP_TABLE_LEN_0323 50
! { 0x0041, 0x1EA0 },
! { 0x0042, 0x1E04 },
! { 0x0044, 0x1E0C },
! { 0x0045, 0x1EB8 },
! { 0x0048, 0x1E24 },
! { 0x0049, 0x1ECA },
! { 0x004B, 0x1E32 },
! { 0x004C, 0x1E36 },
! { 0x004D, 0x1E42 },
! { 0x004E, 0x1E46 },
! { 0x004F, 0x1ECC },
! { 0x0052, 0x1E5A },
! { 0x0053, 0x1E62 },
! { 0x0054, 0x1E6C },
! { 0x0055, 0x1EE4 },
! { 0x0056, 0x1E7E },
! { 0x0057, 0x1E88 },
! { 0x0059, 0x1EF4 },
! { 0x005A, 0x1E92 },
! { 0x0061, 0x1EA1 },
! { 0x0062, 0x1E05 },
! { 0x0064, 0x1E0D },
! { 0x0065, 0x1EB9 },
! { 0x0068, 0x1E25 },
! { 0x0069, 0x1ECB },
! { 0x006B, 0x1E33 },
! { 0x006C, 0x1E37 },
! { 0x006D, 0x1E43 },
! { 0x006E, 0x1E47 },
! { 0x006F, 0x1ECD },
! { 0x0072, 0x1E5B },
! { 0x0073, 0x1E63 },
! { 0x0074, 0x1E6D },
! { 0x0075, 0x1EE5 },
! { 0x0076, 0x1E7F },
! { 0x0077, 0x1E89 },
! { 0x0079, 0x1EF5 },
! { 0x007A, 0x1E93 },
! { 0x00C2, 0x1EAC },
! { 0x00CA, 0x1EC6 },
! { 0x00D4, 0x1ED8 },
! { 0x00E2, 0x1EAD },
! { 0x00EA, 0x1EC7 },
! { 0x00F4, 0x1ED9 },
! { 0x0102, 0x1EB6 },
! { 0x0103, 0x1EB7 },
! { 0x01A0, 0x1EE2 },
! { 0x01A1, 0x1EE3 },
! { 0x01AF, 0x1EF0 },
! { 0x01B0, 0x1EF1 },
! };
!
! static const struct { unsigned int idx; unsigned int len; } comp_table[5] = {
! { COMP_TABLE_IDX_0300, COMP_TABLE_LEN_0300 },
! { COMP_TABLE_IDX_0301, COMP_TABLE_LEN_0301 },
! { COMP_TABLE_IDX_0303, COMP_TABLE_LEN_0303 },
! { COMP_TABLE_IDX_0309, COMP_TABLE_LEN_0309 },
! { COMP_TABLE_IDX_0323, COMP_TABLE_LEN_0323 },
! };
!
! #define MIN_NEEDED_INPUT MIN_NEEDED_FROM
! #define MIN_NEEDED_OUTPUT MIN_NEEDED_TO
! #define MAX_NEEDED_OUTPUT 8
! #define LOOPFCT FROM_LOOP
! #define BODY \
! { \
! uint32_t ch = *inptr; \
! uint32_t last_ch; \
! int must_buffer_ch; \
! \
! if (ch >= 0x80) \
! { \
! ch = to_ucs4[ch - 0x80]; \
! if (__builtin_expect (ch == L'\0', 0)) \
! { \
! /* This is an illegal character. */ \
! if (! ignore_errors_p ()) \
! { \
! result = __GCONV_ILLEGAL_INPUT; \
! break; \
! } \
! \
! ++inptr; \
! ++*irreversible; \
! continue; \
! } \
! } \
! \
! /* Determine whether there is a buffered character pending. */ \
! last_ch = *statep >> 3; \
! \
! /* We have to buffer ch if it is a possible match in comp_table_data. */ \
! must_buffer_ch = (ch >= 0x0041 && ch <= 0x01b0); \
! \
! if (last_ch) \
! { \
! if (ch >= 0x0300 && ch < 0x0340) \
! { \
! /* See whether last_ch and ch can be combined. */ \
! unsigned int i, i1, i2; \
! \
! switch (ch) \
! { \
! case 0x0300: \
! i = 0; \
! break; \
! case 0x0301: \
! i = 1; \
! break; \
! case 0x0303: \
! i = 2; \
! break; \
! case 0x0309: \
! i = 3; \
! break; \
! case 0x0323: \
! i = 4; \
! break; \
! default: \
! abort (); \
! } \
! \
! i1 = comp_table[i].idx; \
! i2 = i1 + comp_table[i].len - 1; \
! \
! if (last_ch >= comp_table_data[i1].base \
! && last_ch <= comp_table_data[i2].base) \
! { \
! for (;;) \
! { \
! i = (i1 + i2) >> 1; \
! if (last_ch == comp_table_data[i].base) \
! break; \
! if (last_ch < comp_table_data[i].base) \
! { \
! if (i1 == i) \
! goto not_combining; \
! i2 = i; \
! } \
! else \
! { \
! if (i1 != i) \
! i1 = i; \
! else \
! { \
! i = i2; \
! if (last_ch == comp_table_data[i].base) \
! break; \
! goto not_combining; \
! } \
! } \
! } \
! last_ch = comp_table_data[i].composed; \
! /* Output the combined character. */ \
! put32 (outptr, last_ch); \
! outptr += 4; \
! *statep = 0; \
! ++inptr; \
! continue; \
! } \
! } \
! \
! not_combining: \
! /* Output the buffered character. */ \
! put32 (outptr, last_ch); \
! outptr += 4; \
! *statep = 0; \
! \
! /* If we don't have enough room to output ch as well, then deal \
! with it in another round. */ \
! if (!must_buffer_ch && __builtin_expect (outptr + 4 > outend, 0)) \
! continue; \
! } \
! \
! if (must_buffer_ch) \
! *statep = ch << 3; \
! else \
! { \
! put32 (outptr, ch); \
! outptr += 4; \
! } \
! ++inptr; \
! }
! #define LOOP_NEED_FLAGS
! #define EXTRA_LOOP_DECLS , int *statep
! #include <iconv/loop.c>
!
!
! /* Next, define the conversion function from UCS4 to CP1258. */
!
! static const unsigned char from_ucs4[] = {
! #define FROM_IDX_00 0
! 0xc4, 0xc5, 0xc6, 0xc7, /* 0x00c4-0x00c7 */
! 0xc8, 0xc9, 0xca, 0xcb, 0x00, 0xcd, 0xce, 0xcf, /* 0x00c8-0x00cf */
! 0x00, 0xd1, 0x00, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0x00d0-0x00d7 */
! 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0x00d8-0x00df */
! 0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x00e0-0x00e7 */
! 0xe8, 0xe9, 0xea, 0xeb, 0x00, 0xed, 0xee, 0xef, /* 0x00e8-0x00ef */
! 0x00, 0xf1, 0x00, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0x00f0-0x00f7 */
! 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff, /* 0x00f8-0x00ff */
! 0x00, 0x00, 0xc3, 0xe3, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x0107 */
! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0108-0x010f */
! 0xd0, 0xf0, /* 0x0110-0x0111 */
! #define FROM_IDX_01 (FROM_IDX_00 + 78)
! 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x0152-0x0157 */
! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0158-0x015f */
! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0160-0x0167 */
! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0168-0x016f */
! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0170-0x0177 */
! 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0178-0x017f */
! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x0187 */
! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0188-0x018f */
! 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0190-0x0197 */
! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0198-0x019f */
! 0xd5, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01a0-0x01a7 */
! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, /* 0x01a8-0x01af */
! 0xfd, /* 0x01b0-0x01b0 */
! #define FROM_IDX_02 (FROM_IDX_01 + 95)
! 0x88, 0x00, /* 0x02c6-0x02c7 */
! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c8-0x02cf */
! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02d0-0x02d7 */
! 0x00, 0x00, 0x00, 0x00, 0x98, /* 0x02d8-0x02dc */
! #define FROM_IDX_03 (FROM_IDX_02 + 23)
! 0xcc, 0xec, 0x00, 0xde, 0x00, 0x00, 0x00, 0x00, /* 0x0300-0x0307 */
! 0x00, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0308-0x030f */
! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0310-0x0317 */
! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0318-0x031f */
! 0x00, 0x00, 0x00, 0xf2, /* 0x0320-0x0323 */
! #define FROM_IDX_20 (FROM_IDX_03 + 36)
! 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x2013-0x2017 */
! 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x2018-0x201f */
! 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x2020-0x2027 */
! 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2028-0x202f */
! 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2030-0x2037 */
! 0x00, 0x8b, 0x9b, /* 0x2038-0x203a */
! #define FROM_IDX_FF (FROM_IDX_20 + 40)
! };
!
! static const unsigned char comb_table[5] = {
! 0xcc, 0xec, 0xde, 0xd2, 0xf2,
! };
!
! /* Decomposition table for the relevant Unicode characters. */
! static const struct {
! uint16_t composed;
! uint32_t base : 12;
! uint32_t comb1 : 4;
! } decomp_table[] = {
! { 0x00c0, 0x0041, 0 },
! { 0x00c1, 0x0041, 1 },
! { 0x00c3, 0x0041, 2 },
! { 0x00c8, 0x0045, 0 },
! { 0x00c9, 0x0045, 1 },
! { 0x00cc, 0x0049, 0 },
! { 0x00cd, 0x0049, 1 },
! { 0x00d1, 0x004e, 2 },
! { 0x00d2, 0x004f, 0 },
! { 0x00d3, 0x004f, 1 },
! { 0x00d5, 0x004f, 2 },
! { 0x00d9, 0x0055, 0 },
! { 0x00da, 0x0055, 1 },
! { 0x00dd, 0x0059, 1 },
! { 0x00e0, 0x0061, 0 },
! { 0x00e1, 0x0061, 1 },
! { 0x00e3, 0x0061, 2 },
! { 0x00e8, 0x0065, 0 },
! { 0x00e9, 0x0065, 1 },
! { 0x00ec, 0x0069, 0 },
! { 0x00ed, 0x0069, 1 },
! { 0x00f1, 0x006e, 2 },
! { 0x00f2, 0x006f, 0 },
! { 0x00f3, 0x006f, 1 },
! { 0x00f5, 0x006f, 2 },
! { 0x00f9, 0x0075, 0 },
! { 0x00fa, 0x0075, 1 },
! { 0x00fd, 0x0079, 1 },
! { 0x0106, 0x0043, 1 },
! { 0x0107, 0x0063, 1 },
! { 0x0128, 0x0049, 2 },
! { 0x0129, 0x0069, 2 },
! { 0x0139, 0x004c, 1 },
! { 0x013a, 0x006c, 1 },
! { 0x0143, 0x004e, 1 },
! { 0x0144, 0x006e, 1 },
! { 0x0154, 0x0052, 1 },
! { 0x0155, 0x0072, 1 },
! { 0x015a, 0x0053, 1 },
! { 0x015b, 0x0073, 1 },
! { 0x0168, 0x0055, 2 },
! { 0x0169, 0x0075, 2 },
! { 0x0179, 0x005a, 1 },
! { 0x017a, 0x007a, 1 },
! { 0x01d7, 0x00dc, 1 },
! { 0x01d8, 0x00fc, 1 },
! { 0x01db, 0x00dc, 0 },
! { 0x01dc, 0x00fc, 0 },
! { 0x01f4, 0x0047, 1 },
! { 0x01f5, 0x0067, 1 },
! { 0x01f8, 0x004e, 0 },
! { 0x01f9, 0x006e, 0 },
! { 0x01fa, 0x00c5, 1 },
! { 0x01fb, 0x00e5, 1 },
! { 0x01fc, 0x00c6, 1 },
! { 0x01fd, 0x00e6, 1 },
! { 0x01fe, 0x00d8, 1 },
! { 0x01ff, 0x00f8, 1 },
! { 0x0385, 0x00a5, 1 },
! { 0x1e04, 0x0042, 4 },
! { 0x1e05, 0x0062, 4 },
! { 0x1e08, 0x00c7, 1 },
! { 0x1e09, 0x00e7, 1 },
! { 0x1e0c, 0x0044, 4 },
! { 0x1e0d, 0x0064, 4 },
! { 0x1e24, 0x0048, 4 },
! { 0x1e25, 0x0068, 4 },
! { 0x1e2e, 0x00cf, 1 },
! { 0x1e2f, 0x00ef, 1 },
! { 0x1e30, 0x004b, 1 },
! { 0x1e31, 0x006b, 1 },
! { 0x1e32, 0x004b, 4 },
! { 0x1e33, 0x006b, 4 },
! { 0x1e36, 0x004c, 4 },
! { 0x1e37, 0x006c, 4 },
! { 0x1e3e, 0x004d, 1 },
! { 0x1e3f, 0x006d, 1 },
! { 0x1e42, 0x004d, 4 },
! { 0x1e43, 0x006d, 4 },
! { 0x1e46, 0x004e, 4 },
! { 0x1e47, 0x006e, 4 },
! { 0x1e4c, 0x00d3, 2 }, /*{ 0x1e4c, 0x00d5, 1 }, { 0x1e4c, 0x004f, 1, 2 },*/
! { 0x1e4d, 0x00f3, 2 }, /*{ 0x1e4d, 0x00f5, 1 }, { 0x1e4d, 0x006f, 1, 2 },*/
! { 0x1e4e, 0x00d6, 2 },
! { 0x1e4f, 0x00f6, 2 },
! { 0x1e54, 0x0050, 1 },
! { 0x1e55, 0x0070, 1 },
! { 0x1e5a, 0x0052, 4 },
! { 0x1e5b, 0x0072, 4 },
! { 0x1e62, 0x0053, 4 },
! { 0x1e63, 0x0073, 4 },
! { 0x1e6c, 0x0054, 4 },
! { 0x1e6d, 0x0074, 4 },
! { 0x1e78, 0x00da, 2 }, /*{ 0x1e78, 0x0168, 1 }, { 0x1e78, 0x0055, 1, 2 },*/
! { 0x1e79, 0x00fa, 2 }, /*{ 0x1e79, 0x0169, 1 }, { 0x1e79, 0x0075, 1, 2 },*/
! { 0x1e7c, 0x0056, 2 },
! { 0x1e7d, 0x0076, 2 },
! { 0x1e7e, 0x0056, 4 },
! { 0x1e7f, 0x0076, 4 },
! { 0x1e80, 0x0057, 0 },
! { 0x1e81, 0x0077, 0 },
! { 0x1e82, 0x0057, 1 },
! { 0x1e83, 0x0077, 1 },
! { 0x1e88, 0x0057, 4 },
! { 0x1e89, 0x0077, 4 },
! { 0x1e92, 0x005a, 4 },
! { 0x1e93, 0x007a, 4 },
! { 0x1ea0, 0x0041, 4 },
! { 0x1ea1, 0x0061, 4 },
! { 0x1ea2, 0x0041, 3 },
! { 0x1ea3, 0x0061, 3 },
! { 0x1ea4, 0x00c2, 1 },
! { 0x1ea5, 0x00e2, 1 },
! { 0x1ea6, 0x00c2, 0 },
! { 0x1ea7, 0x00e2, 0 },
! { 0x1ea8, 0x00c2, 3 },
! { 0x1ea9, 0x00e2, 3 },
! { 0x1eaa, 0x00c2, 2 },
! { 0x1eab, 0x00e2, 2 },
! { 0x1eac, 0x00c2, 4 },
! { 0x1ead, 0x00e2, 4 },
! { 0x1eae, 0x0102, 1 },
! { 0x1eaf, 0x0103, 1 },
! { 0x1eb0, 0x0102, 0 },
! { 0x1eb1, 0x0103, 0 },
! { 0x1eb2, 0x0102, 3 },
! { 0x1eb3, 0x0103, 3 },
! { 0x1eb4, 0x0102, 2 },
! { 0x1eb5, 0x0103, 2 },
! { 0x1eb6, 0x0102, 4 },
! { 0x1eb7, 0x0103, 4 },
! { 0x1eb8, 0x0045, 4 },
! { 0x1eb9, 0x0065, 4 },
! { 0x1eba, 0x0045, 3 },
! { 0x1ebb, 0x0065, 3 },
! { 0x1ebc, 0x0045, 2 },
! { 0x1ebd, 0x0065, 2 },
! { 0x1ebe, 0x00ca, 1 },
! { 0x1ebf, 0x00ea, 1 },
! { 0x1ec0, 0x00ca, 0 },
! { 0x1ec1, 0x00ea, 0 },
! { 0x1ec2, 0x00ca, 3 },
! { 0x1ec3, 0x00ea, 3 },
! { 0x1ec4, 0x00ca, 2 },
! { 0x1ec5, 0x00ea, 2 },
! { 0x1ec6, 0x00ca, 4 },
! { 0x1ec7, 0x00ea, 4 },
! { 0x1ec8, 0x0049, 3 },
! { 0x1ec9, 0x0069, 3 },
! { 0x1eca, 0x0049, 4 },
! { 0x1ecb, 0x0069, 4 },
! { 0x1ecc, 0x004f, 4 },
! { 0x1ecd, 0x006f, 4 },
! { 0x1ece, 0x004f, 3 },
! { 0x1ecf, 0x006f, 3 },
! { 0x1ed0, 0x00d4, 1 },
! { 0x1ed1, 0x00f4, 1 },
! { 0x1ed2, 0x00d4, 0 },
! { 0x1ed3, 0x00f4, 0 },
! { 0x1ed4, 0x00d4, 3 },
! { 0x1ed5, 0x00f4, 3 },
! { 0x1ed6, 0x00d4, 2 },
! { 0x1ed7, 0x00f4, 2 },
! { 0x1ed8, 0x00d4, 4 },
! { 0x1ed9, 0x00f4, 4 },
! { 0x1eda, 0x01a0, 1 },
! { 0x1edb, 0x01a1, 1 },
! { 0x1edc, 0x01a0, 0 },
! { 0x1edd, 0x01a1, 0 },
! { 0x1ede, 0x01a0, 3 },
! { 0x1edf, 0x01a1, 3 },
! { 0x1ee0, 0x01a0, 2 },
! { 0x1ee1, 0x01a1, 2 },
! { 0x1ee2, 0x01a0, 4 },
! { 0x1ee3, 0x01a1, 4 },
! { 0x1ee4, 0x0055, 4 },
! { 0x1ee5, 0x0075, 4 },
! { 0x1ee6, 0x0055, 3 },
! { 0x1ee7, 0x0075, 3 },
! { 0x1ee8, 0x01af, 1 },
! { 0x1ee9, 0x01b0, 1 },
! { 0x1eea, 0x01af, 0 },
! { 0x1eeb, 0x01b0, 0 },
! { 0x1eec, 0x01af, 3 },
! { 0x1eed, 0x01b0, 3 },
! { 0x1eee, 0x01af, 2 },
! { 0x1eef, 0x01b0, 2 },
! { 0x1ef0, 0x01af, 4 },
! { 0x1ef1, 0x01b0, 4 },
! { 0x1ef2, 0x0059, 0 },
! { 0x1ef3, 0x0079, 0 },
! { 0x1ef4, 0x0059, 4 },
! { 0x1ef5, 0x0079, 4 },
! { 0x1ef6, 0x0059, 3 },
! { 0x1ef7, 0x0079, 3 },
! { 0x1ef8, 0x0059, 2 },
! { 0x1ef9, 0x0079, 2 },
! { 0x1fed, 0x00a8, 0 },
! { 0x1fee, 0x00a8, 1 },
! };
!
! #define MIN_NEEDED_INPUT MIN_NEEDED_TO
! #define MIN_NEEDED_OUTPUT MIN_NEEDED_FROM
! #define MAX_NEEDED_OUTPUT 2
! #define LOOPFCT TO_LOOP
! #define BODY \
! { \
! uint32_t ch = get32 (inptr); \
! \
! if (ch < 0x0080 || (ch >= 0x00a0 && ch < 0x00c3)) \
! { \
! *outptr++ = ch; \
! inptr += 4; \
! } \
! else \
! { \
! unsigned char res; \
! \
! if (ch >= 0x00c4 && ch < 0x0112) \
! res = from_ucs4[ch - 0x00c4 + FROM_IDX_00]; \
! else if (ch >= 0x0152 && ch < 0x01b1) \
! res = from_ucs4[ch - 0x0152 + FROM_IDX_01]; \
! else if (ch >= 0x02c6 && ch < 0x02dd) \
! res = from_ucs4[ch - 0x02c6 + FROM_IDX_02]; \
! else if (ch >= 0x0300 && ch < 0x0324) \
! res = from_ucs4[ch - 0x0300 + FROM_IDX_03]; \
! else if (ch >= 0x0340 && ch < 0x0342) /* Vietnamese tone marks */ \
! res = from_ucs4[ch - 0x0340 + FROM_IDX_03]; \
! else if (ch >= 0x2013 && ch < 0x203b) \
! res = from_ucs4[ch - 0x2013 + FROM_IDX_20]; \
! else if (ch == 0x20ab) \
! res = 0xfe; \
! else if (ch == 0x20ac) \
! res = 0x80; \
! else if (ch == 0x2122) \
! res = 0x99; \
! else \
! res = 0; \
! \
! if (__builtin_expect (res != 0, 1)) \
! { \
! *outptr++ = res; \
! inptr += 4; \
! } \
! else \
! { \
! /* Try canonical decomposition. */ \
! unsigned int i1, i2; \
! \
! i1 = 0; \
! i2 = sizeof (decomp_table) / sizeof (decomp_table[0]) - 1; \
! if (ch >= decomp_table[i1].composed \
! && ch <= decomp_table[i2].composed) \
! { \
! unsigned int i; \
! \
! for (;;) \
! { \
! i = (i1 + i2) >> 1; \
! if (ch == decomp_table[i].composed) \
! break; \
! if (ch < decomp_table[i].composed) \
! { \
! if (i1 == i) \
! goto failed; \
! i2 = i; \
! } \
! else \
! { \
! if (i1 != i) \
! i1 = i; \
! else \
! { \
! i = i2; \
! if (ch == decomp_table[i].composed) \
! break; \
! goto failed; \
! } \
! } \
! } \
! \
! /* Found a canonical decomposition. */ \
! ch = decomp_table[i].base; \
! /* ch is one of 0x0020, 0x0041..0x005a, 0x0061..0x007a, \
! 0x00a5, 0x00a8, 0x00c2, 0x00c5..0x00c7, 0x00ca, 0x00cf, \
! 0x00d3, 0x00d4, 0x00d6, 0x00d8, 0x00da, 0x00dc, 0x00e2, \
! 0x00e5..0x00e7, 0x00ea, 0x00ef, 0x00f3, 0x00f4, 0x00f6, \
! 0x00f8, 0x00fc, 0x0102, 0x0103, 0x01a0, 0x01a1, 0x01af, \
! 0x01b0. */ \
! if (ch >= 0x0100) \
! { \
! if (ch < 0x0112) \
! ch = from_ucs4[ch - 0x00c4 + FROM_IDX_00]; \
! else \
! ch = from_ucs4[ch - 0x0152 + FROM_IDX_01]; \
! } \
! assert (ch != 0); \
! \
! /* See whether we have room for two bytes. */ \
! if (__builtin_expect (outptr + 1 >= outend, 0)) \
! { \
! result = __GCONV_FULL_OUTPUT; \
! break; \
! } \
! \
! *outptr++ = (unsigned char) ch; \
! *outptr++ = comb_table[decomp_table[i].comb1]; \
! inptr += 4; \
! continue; \
! } \
! \
! failed: \
! /* This is an illegal character. */ \
! STANDARD_ERR_HANDLER (4); \
! } \
! } \
! }
! #define LOOP_NEED_FLAGS
! #define EXTRA_LOOP_DECLS , int *statep
! #include <iconv/loop.c>
!
!
! /* Now define the toplevel functions. */
! #include <iconv/skeleton.c>
*** glibc-20010430/iconvdata/Makefile.bak Tue Apr 17 19:07:33 2001
--- glibc-20010430/iconvdata/Makefile Tue May 15 13:26:09 2001
***************
*** 175,181 ****
inis-cyrillic iso_2033 iso_5427 iso_5427-ext \
iso_5428 iso_10367-box mac-is nats-dano nats-sefi \
iso8859-13 iso8859-14 iso8859-15 mac-uk sami-ws2 \
! iso-ir-197 cp1258 tis-620 koi8-u ibm874
gen-special-modules := iso8859-7jp
--- 175,181 ----
inis-cyrillic iso_2033 iso_5427 iso_5427-ext \
iso_5428 iso_10367-box mac-is nats-dano nats-sefi \
iso8859-13 iso8859-14 iso8859-15 mac-uk sami-ws2 \
! iso-ir-197 tis-620 koi8-u ibm874
gen-special-modules := iso8859-7jp
*** glibc-20010430/iconvdata/TESTS.bak Mon Jan 22 22:29:08 2001
--- glibc-20010430/iconvdata/TESTS Tue May 15 12:52:05 2001
***************
*** 75,81 ****
--- 75,84 ----
CP1255 CP1255 Y UTF8
CP1256 CP1256 Y UTF8
CP1257 CP1257 Y UTF8
+ # CP1258 and WINDOWS-1258 are the same encodings. The first test works with the
+ # charmap as well. The second one tests character composition/decomposition.
CP1258 CP1258 Y UTF8
+ WINDOWS-1258 WINDOWS-1258 N UTF8
ISO-2022-JP ISO-2022-JP N UTF8
ISO-2022-JP-2 ISO-2022-JP-2 N UTF8
ISO-2022-KR ISO-2022-KR N UTF8
*** glibc-20010430/iconvdata/tst-table-from.c.bak Tue Jan 2 16:16:43 2001
--- glibc-20010430/iconvdata/tst-table-from.c Tue May 15 01:37:15 2001
***************
*** 1,4 ****
! /* Copyright (C) 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Bruno Haible <haible@clisp.cons.org>, 2000.
--- 1,4 ----
! /* Copyright (C) 2000-2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Bruno Haible <haible@clisp.cons.org>, 2000.
***************
*** 64,72 ****
size_t inbytesleft = buflen;
char *outbuf = (char *) out;
size_t outbytesleft = 6;
! size_t result = iconv (cd,
! (char **) &inbuf, &inbytesleft,
! &outbuf, &outbytesleft);
if (result == (size_t)(-1))
{
if (errno == EILSEQ)
--- 64,76 ----
size_t inbytesleft = buflen;
char *outbuf = (char *) out;
size_t outbytesleft = 6;
! size_t result;
!
! iconv (cd, NULL, NULL, NULL, NULL);
! result = iconv (cd, (char **) &inbuf, &inbytesleft, &outbuf, &outbytesleft);
! if (result != (size_t)(-1))
! result = iconv (cd, NULL, NULL, &outbuf, &outbytesleft);
!
if (result == (size_t)(-1))
{
if (errno == EILSEQ)
***************
*** 100,116 ****
}
}
! /* Returns the out[] buffer as a Unicode value. */
! static unsigned int
utf8_decode (const unsigned char *out, unsigned int outlen)
{
! return (outlen==1 ? out[0] :
! outlen==2 ? ((out[0] & 0x1f) << 6) + (out[1] & 0x3f) :
! outlen==3 ? ((out[0] & 0x0f) << 12) + ((out[1] & 0x3f) << 6) + (out[2] & 0x3f) :
! outlen==4 ? ((out[0] & 0x07) << 18) + ((out[1] & 0x3f) << 12) + ((out[2] & 0x3f) << 6) + (out[3] & 0x3f) :
! outlen==5 ? ((out[0] & 0x03) << 24) + ((out[1] & 0x3f) << 18) + ((out[2] & 0x3f) << 12) + ((out[3] & 0x3f) << 6) + (out[4] & 0x3f) :
! outlen==6 ? ((out[0] & 0x01) << 30) + ((out[1] & 0x3f) << 24) + ((out[2] & 0x3f) << 18) + ((out[3] & 0x3f) << 12) + ((out[4] & 0x3f) << 6) + (out[5] & 0x3f) :
! 0xfffd);
}
int
--- 104,171 ----
}
}
! /* Returns the out[] buffer as a Unicode value, formatted as 0x%04X. */
! static const char *
utf8_decode (const unsigned char *out, unsigned int outlen)
{
! static char hexbuf[42];
! char *p = hexbuf;
!
! while (outlen > 0)
! {
! if (p > hexbuf)
! *p++ = ' ';
!
! if (out[0] < 0x80)
! {
! sprintf (p, "0x%04X", out[0]);
! out += 1; outlen -= 1;
! }
! else if (out[0] >= 0xc0 && out[0] < 0xe0 && outlen >= 2)
! {
! sprintf (p, "0x%04X", ((out[0] & 0x1f) << 6) + (out[1] & 0x3f));
! out += 2; outlen -= 2;
! }
! else if (out[0] >= 0xe0 && out[0] < 0xf0 && outlen >= 3)
! {
! sprintf (p, "0x%04X", ((out[0] & 0x0f) << 12)
! + ((out[1] & 0x3f) << 6) + (out[2] & 0x3f));
! out += 3; outlen -= 3;
! }
! else if (out[0] >= 0xf0 && out[0] < 0xf8 && outlen >= 4)
! {
! sprintf (p, "0x%04X", ((out[0] & 0x07) << 18)
! + ((out[1] & 0x3f) << 12)
! + ((out[2] & 0x3f) << 6) + (out[3] & 0x3f));
! out += 4; outlen -= 4;
! }
! else if (out[0] >= 0xf8 && out[0] < 0xfc && outlen >= 5)
! {
! sprintf (p, "0x%04X", ((out[0] & 0x03) << 24)
! + ((out[1] & 0x3f) << 18)
! + ((out[2] & 0x3f) << 12)
! + ((out[3] & 0x3f) << 6) + (out[4] & 0x3f));
! out += 5; outlen -= 5;
! }
! else if (out[0] >= 0xfc && out[0] < 0xfe && outlen >= 6)
! {
! sprintf (p, "0x%04X", ((out[0] & 0x01) << 30)
! + ((out[1] & 0x3f) << 24)
! + ((out[2] & 0x3f) << 18)
! + ((out[3] & 0x3f) << 12)
! + ((out[4] & 0x3f) << 6) + (out[5] & 0x3f));
! out += 6; outlen -= 6;
! }
! else
! {
! sprintf (p, "0x????");
! out += 1; outlen -= 1;
! }
!
! p += strlen (p);
! }
!
! return hexbuf;
}
int
***************
*** 148,154 ****
}
else if (result > 0)
{
! printf ("0x%02X\t0x%04X\n",
i0, utf8_decode (out, result));
}
else
--- 203,209 ----
}
else if (result > 0)
{
! printf ("0x%02X\t%s\n",
i0, utf8_decode (out, result));
}
else
***************
*** 162,168 ****
}
else if (result > 0)
{
! printf ("0x%02X%02X\t0x%04X\n",
i0, i1, utf8_decode (out, result));
}
else
--- 217,223 ----
}
else if (result > 0)
{
! printf ("0x%02X%02X\t%s\n",
i0, i1, utf8_decode (out, result));
}
else
***************
*** 176,182 ****
}
else if (result > 0)
{
! printf ("0x%02X%02X%02X\t0x%04X\n",
i0, i1, i2, utf8_decode (out, result));
}
else if (strcmp (charset, "UTF-8"))
--- 231,237 ----
}
else if (result > 0)
{
! printf ("0x%02X%02X%02X\t%s\n",
i0, i1, i2, utf8_decode (out, result));
}
else if (strcmp (charset, "UTF-8"))
***************
*** 190,196 ****
}
else if (result > 0)
{
! printf ("0x%02X%02X%02X%02X\t0x%04X\n",
i0, i1, i2, i3,
utf8_decode (out, result));
}
--- 245,251 ----
}
else if (result > 0)
{
! printf ("0x%02X%02X%02X%02X\t%s\n",
i0, i1, i2, i3,
utf8_decode (out, result));
}
*** glibc-20010430/iconvdata/CP1258.irreversible.bak Tue May 15 01:47:45 2001
--- glibc-20010430/iconvdata/CP1258.irreversible Tue May 15 01:45:50 2001
***************
*** 0 ****
--- 1,183 ----
+ 0x41D2 0x1EA2
+ 0x41DE 0x00C3
+ 0x41F2 0x1EA0
+ 0x42F2 0x1E04
+ 0x43EC 0x0106
+ 0x44F2 0x1E0C
+ 0x45D2 0x1EBA
+ 0x45DE 0x1EBC
+ 0x45F2 0x1EB8
+ 0x47EC 0x01F4
+ 0x48F2 0x1E24
+ 0x49CC 0x00CC
+ 0x49D2 0x1EC8
+ 0x49DE 0x0128
+ 0x49F2 0x1ECA
+ 0x4BEC 0x1E30
+ 0x4BF2 0x1E32
+ 0x4CEC 0x0139
+ 0x4CF2 0x1E36
+ 0x4DEC 0x1E3E
+ 0x4DF2 0x1E42
+ 0x4ECC 0x01F8
+ 0x4EEC 0x0143
+ 0x4EF2 0x1E46
+ 0x4FCC 0x00D2
+ 0x4FD2 0x1ECE
+ 0x4FDE 0x00D5
+ 0x4FF2 0x1ECC
+ 0x50EC 0x1E54
+ 0x52EC 0x0154
+ 0x52F2 0x1E5A
+ 0x53EC 0x015A
+ 0x53F2 0x1E62
+ 0x54F2 0x1E6C
+ 0x55D2 0x1EE6
+ 0x55DE 0x0168
+ 0x55F2 0x1EE4
+ 0x56DE 0x1E7C
+ 0x56F2 0x1E7E
+ 0x57CC 0x1E80
+ 0x57EC 0x1E82
+ 0x57F2 0x1E88
+ 0x59CC 0x1EF2
+ 0x59D2 0x1EF6
+ 0x59DE 0x1EF8
+ 0x59EC 0x00DD
+ 0x59F2 0x1EF4
+ 0x5AEC 0x0179
+ 0x5AF2 0x1E92
+ 0x61D2 0x1EA3
+ 0x61DE 0x00E3
+ 0x61F2 0x1EA1
+ 0x62F2 0x1E05
+ 0x63EC 0x0107
+ 0x64F2 0x1E0D
+ 0x65D2 0x1EBB
+ 0x65DE 0x1EBD
+ 0x65F2 0x1EB9
+ 0x67EC 0x01F5
+ 0x68F2 0x1E25
+ 0x69CC 0x00EC
+ 0x69D2 0x1EC9
+ 0x69DE 0x0129
+ 0x69F2 0x1ECB
+ 0x6BEC 0x1E31
+ 0x6BF2 0x1E33
+ 0x6CEC 0x013A
+ 0x6CF2 0x1E37
+ 0x6DEC 0x1E3F
+ 0x6DF2 0x1E43
+ 0x6ECC 0x01F9
+ 0x6EEC 0x0144
+ 0x6EF2 0x1E47
+ 0x6FCC 0x00F2
+ 0x6FD2 0x1ECF
+ 0x6FDE 0x00F5
+ 0x6FF2 0x1ECD
+ 0x70EC 0x1E55
+ 0x72EC 0x0155
+ 0x72F2 0x1E5B
+ 0x73EC 0x015B
+ 0x73F2 0x1E63
+ 0x74F2 0x1E6D
+ 0x75D2 0x1EE7
+ 0x75DE 0x0169
+ 0x75F2 0x1EE5
+ 0x76DE 0x1E7D
+ 0x76F2 0x1E7F
+ 0x77CC 0x1E81
+ 0x77EC 0x1E83
+ 0x77F2 0x1E89
+ 0x79CC 0x1EF3
+ 0x79D2 0x1EF7
+ 0x79DE 0x1EF9
+ 0x79EC 0x00FD
+ 0x79F2 0x1EF5
+ 0x7AEC 0x017A
+ 0x7AF2 0x1E93
+ 0xA5EC 0x0385
+ 0xA8CC 0x1FED
+ 0xA8EC 0x1FEE
+ 0xC2CC 0x1EA6
+ 0xC2D2 0x1EA8
+ 0xC2DE 0x1EAA
+ 0xC2EC 0x1EA4
+ 0xC2F2 0x1EAC
+ 0xC3CC 0x1EB0
+ 0xC3D2 0x1EB2
+ 0xC3DE 0x1EB4
+ 0xC3EC 0x1EAE
+ 0xC3F2 0x1EB6
+ 0xC5EC 0x01FA
+ 0xC6EC 0x01FC
+ 0xC7EC 0x1E08
+ 0xCACC 0x1EC0
+ 0xCAD2 0x1EC2
+ 0xCADE 0x1EC4
+ 0xCAEC 0x1EBE
+ 0xCAF2 0x1EC6
+ 0xCC 0x0340
+ 0xCFEC 0x1E2E
+ 0xD3DE 0x1E4C
+ 0xD4CC 0x1ED2
+ 0xD4D2 0x1ED4
+ 0xD4DE 0x1ED6
+ 0xD4EC 0x1ED0
+ 0xD4F2 0x1ED8
+ 0xD5CC 0x1EDC
+ 0xD5D2 0x1EDE
+ 0xD5DE 0x1EE0
+ 0xD5EC 0x1EDA
+ 0xD5F2 0x1EE2
+ 0xD6DE 0x1E4E
+ 0xD8EC 0x01FE
+ 0xDADE 0x1E78
+ 0xDCCC 0x01DB
+ 0xDCEC 0x01D7
+ 0xDDCC 0x1EEA
+ 0xDDD2 0x1EEC
+ 0xDDDE 0x1EEE
+ 0xDDEC 0x1EE8
+ 0xDDF2 0x1EF0
+ 0xE2CC 0x1EA7
+ 0xE2D2 0x1EA9
+ 0xE2DE 0x1EAB
+ 0xE2EC 0x1EA5
+ 0xE2F2 0x1EAD
+ 0xE3CC 0x1EB1
+ 0xE3D2 0x1EB3
+ 0xE3DE 0x1EB5
+ 0xE3EC 0x1EAF
+ 0xE3F2 0x1EB7
+ 0xE5EC 0x01FB
+ 0xE6EC 0x01FD
+ 0xE7EC 0x1E09
+ 0xEACC 0x1EC1
+ 0xEAD2 0x1EC3
+ 0xEADE 0x1EC5
+ 0xEAEC 0x1EBF
+ 0xEAF2 0x1EC7
+ 0xEC 0x0341
+ 0xEFEC 0x1E2F
+ 0xF3DE 0x1E4D
+ 0xF4CC 0x1ED3
+ 0xF4D2 0x1ED5
+ 0xF4DE 0x1ED7
+ 0xF4EC 0x1ED1
+ 0xF4F2 0x1ED9
+ 0xF5CC 0x1EDD
+ 0xF5D2 0x1EDF
+ 0xF5DE 0x1EE1
+ 0xF5EC 0x1EDB
+ 0xF5F2 0x1EE3
+ 0xF6DE 0x1E4F
+ 0xF8EC 0x01FF
+ 0xFADE 0x1E79
+ 0xFCCC 0x01DC
+ 0xFCEC 0x01D8
+ 0xFDCC 0x1EEB
+ 0xFDD2 0x1EED
+ 0xFDDE 0x1EEF
+ 0xFDEC 0x1EE9
+ 0xFDF2 0x1EF1
begin 644 viet-testdata.tar.gz
M'XL(`)03`3L``^W4O4X"01`'<%IYBBDU$3B^#GN-B8T6(M0+S,G$8Y?<#KZ"
MKZ&O@86%+R(ML>()7`X3C044$C__OV8W>[-SF[N=D;ZSUP.CIJ+L-9]T3TZ/
MSKKGI6JM>5#8AJ@:17&C48A6/HY1O17FK7J8->.X6@_QS;"E0-%6WK[!Q*O)
MB`J9<[HN;M/S7ZI2H?:0*35>*17+Y!+2H7A*)&4*XTB\%WL9%IG8#DHN*>5Q
MRME(K%&7%4,.9VD\R<;.\SZ))9<-."-UM+Q48:O1?/_RKG'F)43S:*S"/E_N
MB5)ODB2<IS)V0'XHB7KJF?Y5GB4$B145DU+X7<KTFC`<:'7@][G+Q8ZP6C-B
MS[3;EOES.'Y'Y@O=VSD</KF0=F&_^[O_%+*^_LOEB_;Q9[O`YOIOO-5_5%O6
M?UQMHOZ_PC^H_]GT(6\`L_N;O`,\WH86,)O>H0<```````````````````#`
+G_`"F,&R*``H````
`
end