diff options
| author | Ulrich Drepper <drepper@redhat.com> | 2000-06-06 03:16:30 +0000 |
|---|---|---|
| committer | Ulrich Drepper <drepper@redhat.com> | 2000-06-06 03:16:30 +0000 |
| commit | 85830c4c4688b30d3d76111aa9a26745c7b141d6 (patch) | |
| tree | 8b2b99b4e538983ac760fb4faa94ce0a42121fa2 /iconvdata | |
| parent | b0f1ca68448e9049cb6d266f327ca36523f3f675 (diff) | |
| download | glibc-85830c4c4688b30d3d76111aa9a26745c7b141d6.tar.xz glibc-85830c4c4688b30d3d76111aa9a26745c7b141d6.zip | |
Update.
* iconv/gconv.h (__GCONV_IS_LAST, __GCONV_IGNORE_ERRORS): Define.
(struct __gconv_step_data): Rename __is_last to __flags.
* iconv/gconv_close.c: Change all uses of __is_last.
* iconv/skeleton.c: Likewise.
* iconvdata/iso-2022-cn.c: Likewise.
* iconvdata/iso-2022-jp.c: Likewise.
* iconvdata/iso-2022-kr.c: Likewise.
* iconv/gconv_open.c: Likewise. Avoid unneeded initializations.
Recognize IGNORE error handling, set flag, and remove from name.
* iconv/loop.c (ignore_errors_p): Define.
Add flags parameter to both functions.
* iconv/skeleton.c: Pass flags to all conversion functions.
* iconv/gconv_simple.c: Add flags parameter to all functions.
Don't return error for invald error if ignore flag is set.
(ucs4_internal_loop_single): Add missing pointer increment.
(internal_ucs4le_loop_single): Likewise.
* iconv/iconv_prog.c: Implement handling of -c parameter.
* iconvdata/8bit-gap.c: Don't return error for invald error if
ignore flag is set.
* iconvdata/8bit-generic.c: Likewise.
* iconvdata/ansi_x3.110.c: Likewise.
* iconvdata/big5.c: Likewise.
* iconvdata/big5hkscs.c: Likewise.
* iconvdata/euc-cn.c: Likewise.
* iconvdata/euc-jp.c: Likewise.
* iconvdata/euc-kr.c: Likewise.
* iconvdata/gbgbk.c: Likewise.
* iconvdata/gbk.c: Likewise.
* iconvdata/iso-2022-cn.c: Likewise.
* iconvdata/iso-2022-jp.c: Likewise.
* iconvdata/iso-2022-kr.c: Likewise.
* iconvdata/iso646.c: Likewise.
* iconvdata/iso8859-1.c: Likewise.
* iconvdata/iso_6937-2.c: Likewise.
* iconvdata/iso_6937.c: Likewise.
* iconvdata/johab.c: Likewise.
* iconvdata/sjis.c: Likewise.
* iconvdata/t.61.c: Likewise.
* iconvdata/uhc.c: Likewise.
* iconvdata/unicode.c: Likewise.
* iconvdata/utf-16.c: Likewise.
* libio/fileops.c: Likewise.
* libio/iofwide.c: Likewise.
* wcsmbs/btowc.c: Likewise.
* wcsmbs/mbrtowc.c: Likewise.
* wcsmbs/mbsnrtowcs.c: Likewise.
* wcsmbs/mbsrtowcs.c: Likewise.
* wcsmbs/wcrtomb.c: Likewise.
* wcsmbs/wcsnrtombs.c: Likewise.
* wcsmbs/wcsrtombs.c: Likewise.
* wcsmbs/wctob.c: Likewise.
* iconvdata/ksc5601.h (ksc5601_to_ucs4): Undo *s change in all cases of
Diffstat (limited to 'iconvdata')
| -rw-r--r-- | iconvdata/8bit-gap.c | 49 | ||||
| -rw-r--r-- | iconvdata/8bit-generic.c | 21 | ||||
| -rw-r--r-- | iconvdata/ansi_x3.110.c | 72 | ||||
| -rw-r--r-- | iconvdata/big5.c | 52 | ||||
| -rw-r--r-- | iconvdata/big5hkscs.c | 52 | ||||
| -rw-r--r-- | iconvdata/euc-cn.c | 49 | ||||
| -rw-r--r-- | iconvdata/euc-jp.c | 47 | ||||
| -rw-r--r-- | iconvdata/euc-kr.c | 34 | ||||
| -rw-r--r-- | iconvdata/gbgbk.c | 26 | ||||
| -rw-r--r-- | iconvdata/gbk.c | 57 | ||||
| -rw-r--r-- | iconvdata/iso-2022-cn.c | 49 | ||||
| -rw-r--r-- | iconvdata/iso-2022-jp.c | 86 | ||||
| -rw-r--r-- | iconvdata/iso-2022-kr.c | 65 | ||||
| -rw-r--r-- | iconvdata/iso646.c | 32 | ||||
| -rw-r--r-- | iconvdata/iso8859-1.c | 14 | ||||
| -rw-r--r-- | iconvdata/iso_6937-2.c | 60 | ||||
| -rw-r--r-- | iconvdata/iso_6937.c | 60 | ||||
| -rw-r--r-- | iconvdata/johab.c | 96 | ||||
| -rw-r--r-- | iconvdata/sjis.c | 80 | ||||
| -rw-r--r-- | iconvdata/t.61.c | 55 | ||||
| -rw-r--r-- | iconvdata/uhc.c | 72 | ||||
| -rw-r--r-- | iconvdata/unicode.c | 18 | ||||
| -rw-r--r-- | iconvdata/utf-16.c | 48 |
23 files changed, 923 insertions, 271 deletions
diff --git a/iconvdata/8bit-gap.c b/iconvdata/8bit-gap.c index b633c475b8..c805d5e57c 100644 --- a/iconvdata/8bit-gap.c +++ b/iconvdata/8bit-gap.c @@ -51,12 +51,20 @@ struct gap if (HAS_HOLES && ch == L'\0' && *inptr != '\0') \ { \ /* This is an illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + ++*converted; \ + } \ + else \ + { \ + put32 (outptr, ch); \ + outptr += 4; \ } \ \ - put32 (outptr, ch); \ - outptr += 4; \ ++inptr; \ } #include <iconv/loop.c> @@ -75,24 +83,45 @@ struct gap if (ch >= 0xffff) \ { \ /* This is an illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + ++*converted; \ + inptr += 4; \ + continue; \ } \ while (ch > rp->end) \ ++rp; \ if (ch < rp->start) \ { \ /* This is an illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + ++*converted; \ + inptr += 4; \ + continue; \ } \ \ res = from_ucs4[ch + rp->idx]; \ if (ch != 0 && res == '\0') \ { \ /* This is an illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + ++*converted; \ + inptr += 4; \ + continue; \ } \ \ *outptr++ = res; \ diff --git a/iconvdata/8bit-generic.c b/iconvdata/8bit-generic.c index 3543bdf004..3b6b47abb1 100644 --- a/iconvdata/8bit-generic.c +++ b/iconvdata/8bit-generic.c @@ -37,8 +37,13 @@ if (HAS_HOLES && ch == L'\0' && *inptr != '\0') \ { \ /* This is an illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + ++*converted; \ } \ \ put32 (outptr, ch); \ @@ -60,11 +65,17 @@ || (ch != 0 && from_ucs4[ch] == '\0')) \ { \ /* This is an illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + ++*converted; \ } \ + else \ + *outptr++ = from_ucs4[ch]; \ \ - *outptr++ = from_ucs4[ch]; \ inptr += 4; \ } #include <iconv/loop.c> diff --git a/iconvdata/ansi_x3.110.c b/iconvdata/ansi_x3.110.c index 1dd214bbe5..94bd2e620e 100644 --- a/iconvdata/ansi_x3.110.c +++ b/iconvdata/ansi_x3.110.c @@ -419,13 +419,20 @@ static const char from_ucs4[][2] = if (ch2 < 0x20 || ch2 >= 0x80) \ { \ /* This is illegal. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ - } \ - \ - ch = to_ucs4_comb[ch - 0xc1][ch2 - 0x20]; \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ \ - incr = 2; \ + ++*converted; \ + incr = 1; \ + } \ + else \ + { \ + ch = to_ucs4_comb[ch - 0xc1][ch2 - 0x20]; \ + incr = 2; \ + } \ } \ else \ { \ @@ -436,13 +443,19 @@ static const char from_ucs4[][2] = if (ch == 0 && *inptr != '\0') \ { \ /* This is an illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + } \ + else \ + { \ + put32 (outptr, ch); \ + outptr += 4; \ } \ \ inptr += incr; \ - put32 (outptr, ch); \ - outptr += 4; \ } #include <iconv/loop.c> @@ -480,8 +493,15 @@ static const char from_ucs4[][2] = if (tmp[0] == '\0') \ { \ /* Illegal characters. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + ++*converted; \ + inptr += 4; \ + continue; \ } \ tmp[1] = '\0'; \ cp = tmp; \ @@ -504,13 +524,13 @@ static const char from_ucs4[][2] = cp = "\xd7"; \ else if (ch == 0x253c) \ cp = "\xe5"; \ - else if (ch >= 0x2571 && ch <= 0x2572) \ + else if (ch >= 0x2571 && ch <= 0x2572) \ { \ tmp[0] = 0xd8 + ch - 0x2571; \ tmp[1] = '\0'; \ cp = tmp; \ } \ - else if (ch >= 0x25e2 && ch <= 0x25e3) \ + else if (ch >= 0x25e2 && ch <= 0x25e3) \ { \ tmp[0] = 0xda + ch - 0x25e2; \ tmp[1] = '\0'; \ @@ -521,8 +541,15 @@ static const char from_ucs4[][2] = else \ { \ /* Illegal characters. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + ++*converted; \ + inptr += 4; \ + continue; \ } \ } \ else \ @@ -531,9 +558,16 @@ static const char from_ucs4[][2] = \ if (cp[0] == '\0' && ch != 0) \ { \ - /* Illegal. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + /* Illegal characters. */ \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + ++*converted; \ + inptr += 4; \ + continue; \ } \ } \ \ diff --git a/iconvdata/big5.c b/iconvdata/big5.c index de15ad6239..0e4ca7464a 100644 --- a/iconvdata/big5.c +++ b/iconvdata/big5.c @@ -8455,8 +8455,15 @@ static const char from_ucs4_tab13[][2] = else \ { \ /* This is illegal. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + ++inptr; \ + ++*converted; \ + continue; \ } \ \ /* Get the value from the table. */ \ @@ -8466,8 +8473,15 @@ static const char from_ucs4_tab13[][2] = if (ch == 0 && *inptr != '\0') \ { \ /* This is an illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + inptr += 2; \ + ++*converted; \ + continue; \ } \ \ inptr += 2; \ @@ -8567,21 +8581,29 @@ static const char from_ucs4_tab13[][2] = if (cp[0] == '\0' && ch != 0) \ { \ /* Illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ - } \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ \ - /* See whether there is enough room for the second byte we write. */ \ - if (NEED_LENGTH_TEST && cp[1] != '\0' && outptr + 1 >= outend) \ + ++*converted; \ + } \ + else \ { \ - /* We have not enough room. */ \ - result = __GCONV_FULL_OUTPUT; \ - break; \ + /* See whether there is enough room for the second byte we write. */ \ + if (NEED_LENGTH_TEST && cp[1] != '\0' && outptr + 1 >= outend) \ + { \ + /* We have not enough room. */ \ + result = __GCONV_FULL_OUTPUT; \ + break; \ + } \ + \ + *outptr++ = cp[0]; \ + if (cp[1] != '\0') \ + *outptr++ = cp[1]; \ } \ \ - *outptr++ = cp[0]; \ - if (cp[1] != '\0') \ - *outptr++ = cp[1]; \ inptr += 4; \ } #include <iconv/loop.c> diff --git a/iconvdata/big5hkscs.c b/iconvdata/big5hkscs.c index 7e1999ec03..09974d5523 100644 --- a/iconvdata/big5hkscs.c +++ b/iconvdata/big5hkscs.c @@ -12609,8 +12609,15 @@ static const char from_ucs4_tab14[][2] = else \ { \ /* This is illegal. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + ++inptr; \ + ++*converted; \ + continue; \ } \ \ /* Get the value from the table. */ \ @@ -12620,8 +12627,15 @@ static const char from_ucs4_tab14[][2] = if (ch == 0 && *inptr != '\0') \ { \ /* This is an illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + inptr += 2; \ + ++*converted; \ + continue; \ } \ \ inptr += 2; \ @@ -12724,21 +12738,29 @@ static const char from_ucs4_tab14[][2] = if (cp[0] == '\0' && ch != 0) \ { \ /* Illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ - } \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ \ - /* See whether there is enough room for the second byte we write. */ \ - if (NEED_LENGTH_TEST && cp[1] != '\0' && outptr + 1 >= outend) \ + ++*converted; \ + } \ + else \ { \ - /* We have not enough room. */ \ - result = __GCONV_FULL_OUTPUT; \ - break; \ + /* See whether there is enough room for the second byte we write. */ \ + if (NEED_LENGTH_TEST && cp[1] != '\0' && outptr + 1 >= outend) \ + { \ + /* We have not enough room. */ \ + result = __GCONV_FULL_OUTPUT; \ + break; \ + } \ + \ + *outptr++ = cp[0]; \ + if (cp[1] != '\0') \ + *outptr++ = cp[1]; \ } \ \ - *outptr++ = cp[0]; \ - if (cp[1] != '\0') \ - *outptr++ = cp[1]; \ inptr += 4; \ } #include <iconv/loop.c> diff --git a/iconvdata/euc-cn.c b/iconvdata/euc-cn.c index 61601e7615..3211b57642 100644 --- a/iconvdata/euc-cn.c +++ b/iconvdata/euc-cn.c @@ -44,11 +44,18 @@ if (ch <= 0x7f) \ ++inptr; \ else \ - if ((ch <= 0xa0 || ch > 0xfe) && ch != 0x8e && ch != 0x8f) \ + if ((ch <= 0xa0 && ch != 0x8e && ch != 0x8f) || ch > 0xfe) \ { \ /* This is illegal. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + ++inptr; \ + ++*converted; \ + continue; \ } \ else \ { \ @@ -69,9 +76,16 @@ /* All second bytes of a multibyte character must be >= 0xa1. */ \ if (ch < 0xa1) \ { \ - /* This is an illegal character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ + if (! ignore_errors_p ()) \ + { \ + /* This is an illegal character. */ \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ < |
