summaryrefslogtreecommitdiff
path: root/lib/iconv.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/iconv.c')
-rw-r--r--lib/iconv.c522
1 files changed, 261 insertions, 261 deletions
diff --git a/lib/iconv.c b/lib/iconv.c
index 56a84c456..f64c04570 100644
--- a/lib/iconv.c
+++ b/lib/iconv.c
@@ -59,25 +59,25 @@ utf16be_mbtowc (ucs4_t *pwc, const unsigned char *s, size_t n)
{
ucs4_t wc = (s[0] << 8) + s[1];
if (wc >= 0xd800 && wc < 0xdc00)
- {
- if (n >= 4)
- {
- ucs4_t wc2 = (s[2] << 8) + s[3];
- if (!(wc2 >= 0xdc00 && wc2 < 0xe000))
- return RET_ILSEQ;
- *pwc = 0x10000 + ((wc - 0xd800) << 10) + (wc2 - 0xdc00);
- return 4;
- }
- }
+ {
+ if (n >= 4)
+ {
+ ucs4_t wc2 = (s[2] << 8) + s[3];
+ if (!(wc2 >= 0xdc00 && wc2 < 0xe000))
+ return RET_ILSEQ;
+ *pwc = 0x10000 + ((wc - 0xd800) << 10) + (wc2 - 0xdc00);
+ return 4;
+ }
+ }
else if (wc >= 0xdc00 && wc < 0xe000)
- {
- return RET_ILSEQ;
- }
+ {
+ return RET_ILSEQ;
+ }
else
- {
- *pwc = wc;
- return 2;
- }
+ {
+ *pwc = wc;
+ return 2;
+ }
}
return RET_TOOFEW;
}
@@ -88,31 +88,31 @@ utf16be_wctomb (unsigned char *r, ucs4_t wc, size_t n)
if (!(wc >= 0xd800 && wc < 0xe000))
{
if (wc < 0x10000)
- {
- if (n >= 2)
- {
- r[0] = (unsigned char) (wc >> 8);
- r[1] = (unsigned char) wc;
- return 2;
- }
- else
- return RET_TOOSMALL;
- }
+ {
+ if (n >= 2)
+ {
+ r[0] = (unsigned char) (wc >> 8);
+ r[1] = (unsigned char) wc;
+ return 2;
+ }
+ else
+ return RET_TOOSMALL;
+ }
else if (wc < 0x110000)
- {
- if (n >= 4)
- {
- ucs4_t wc1 = 0xd800 + ((wc - 0x10000) >> 10);
- ucs4_t wc2 = 0xdc00 + ((wc - 0x10000) & 0x3ff);
- r[0] = (unsigned char) (wc1 >> 8);
- r[1] = (unsigned char) wc1;
- r[2] = (unsigned char) (wc2 >> 8);
- r[3] = (unsigned char) wc2;
- return 4;
- }
- else
- return RET_TOOSMALL;
- }
+ {
+ if (n >= 4)
+ {
+ ucs4_t wc1 = 0xd800 + ((wc - 0x10000) >> 10);
+ ucs4_t wc2 = 0xdc00 + ((wc - 0x10000) & 0x3ff);
+ r[0] = (unsigned char) (wc1 >> 8);
+ r[1] = (unsigned char) wc1;
+ r[2] = (unsigned char) (wc2 >> 8);
+ r[3] = (unsigned char) wc2;
+ return 4;
+ }
+ else
+ return RET_TOOSMALL;
+ }
}
return RET_ILUNI;
}
@@ -130,25 +130,25 @@ utf16le_mbtowc (ucs4_t *pwc, const unsigned char *s, size_t n)
{
ucs4_t wc = s[0] + (s[1] << 8);
if (wc >= 0xd800 && wc < 0xdc00)
- {
- if (n >= 4)
- {
- ucs4_t wc2 = s[2] + (s[3] << 8);
- if (!(wc2 >= 0xdc00 && wc2 < 0xe000))
- return RET_ILSEQ;
- *pwc = 0x10000 + ((wc - 0xd800) << 10) + (wc2 - 0xdc00);
- return 4;
- }
- }
+ {
+ if (n >= 4)
+ {
+ ucs4_t wc2 = s[2] + (s[3] << 8);
+ if (!(wc2 >= 0xdc00 && wc2 < 0xe000))
+ return RET_ILSEQ;
+ *pwc = 0x10000 + ((wc - 0xd800) << 10) + (wc2 - 0xdc00);
+ return 4;
+ }
+ }
else if (wc >= 0xdc00 && wc < 0xe000)
- {
- return RET_ILSEQ;
- }
+ {
+ return RET_ILSEQ;
+ }
else
- {
- *pwc = wc;
- return 2;
- }
+ {
+ *pwc = wc;
+ return 2;
+ }
}
return RET_TOOFEW;
}
@@ -159,31 +159,31 @@ utf16le_wctomb (unsigned char *r, ucs4_t wc, size_t n)
if (!(wc >= 0xd800 && wc < 0xe000))
{
if (wc < 0x10000)
- {
- if (n >= 2)
- {
- r[0] = (unsigned char) wc;
- r[1] = (unsigned char) (wc >> 8);
- return 2;
- }
- else
- return RET_TOOSMALL;
- }
+ {
+ if (n >= 2)
+ {
+ r[0] = (unsigned char) wc;
+ r[1] = (unsigned char) (wc >> 8);
+ return 2;
+ }
+ else
+ return RET_TOOSMALL;
+ }
else if (wc < 0x110000)
- {
- if (n >= 4)
- {
- ucs4_t wc1 = 0xd800 + ((wc - 0x10000) >> 10);
- ucs4_t wc2 = 0xdc00 + ((wc - 0x10000) & 0x3ff);
- r[0] = (unsigned char) wc1;
- r[1] = (unsigned char) (wc1 >> 8);
- r[2] = (unsigned char) wc2;
- r[3] = (unsigned char) (wc2 >> 8);
- return 4;
- }
- else
- return RET_TOOSMALL;
- }
+ {
+ if (n >= 4)
+ {
+ ucs4_t wc1 = 0xd800 + ((wc - 0x10000) >> 10);
+ ucs4_t wc2 = 0xdc00 + ((wc - 0x10000) & 0x3ff);
+ r[0] = (unsigned char) wc1;
+ r[1] = (unsigned char) (wc1 >> 8);
+ r[2] = (unsigned char) wc2;
+ r[3] = (unsigned char) (wc2 >> 8);
+ return 4;
+ }
+ else
+ return RET_TOOSMALL;
+ }
}
return RET_ILUNI;
}
@@ -201,12 +201,12 @@ utf32be_mbtowc (ucs4_t *pwc, const unsigned char *s, size_t n)
{
ucs4_t wc = (s[0] << 24) + (s[1] << 16) + (s[2] << 8) + s[3];
if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000))
- {
- *pwc = wc;
- return 4;
- }
+ {
+ *pwc = wc;
+ return 4;
+ }
else
- return RET_ILSEQ;
+ return RET_ILSEQ;
}
return RET_TOOFEW;
}
@@ -217,15 +217,15 @@ utf32be_wctomb (unsigned char *r, ucs4_t wc, size_t n)
if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000))
{
if (n >= 4)
- {
- r[0] = 0;
- r[1] = (unsigned char) (wc >> 16);
- r[2] = (unsigned char) (wc >> 8);
- r[3] = (unsigned char) wc;
- return 4;
- }
+ {
+ r[0] = 0;
+ r[1] = (unsigned char) (wc >> 16);
+ r[2] = (unsigned char) (wc >> 8);
+ r[3] = (unsigned char) wc;
+ return 4;
+ }
else
- return RET_TOOSMALL;
+ return RET_TOOSMALL;
}
return RET_ILUNI;
}
@@ -243,12 +243,12 @@ utf32le_mbtowc (ucs4_t *pwc, const unsigned char *s, size_t n)
{
ucs4_t wc = s[0] + (s[1] << 8) + (s[2] << 16) + (s[3] << 24);
if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000))
- {
- *pwc = wc;
- return 4;
- }
+ {
+ *pwc = wc;
+ return 4;
+ }
else
- return RET_ILSEQ;
+ return RET_ILSEQ;
}
return RET_TOOFEW;
}
@@ -259,15 +259,15 @@ utf32le_wctomb (unsigned char *r, ucs4_t wc, size_t n)
if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000))
{
if (n >= 4)
- {
- r[0] = (unsigned char) wc;
- r[1] = (unsigned char) (wc >> 8);
- r[2] = (unsigned char) (wc >> 16);
- r[3] = 0;
- return 4;
+ {
+ r[0] = (unsigned char) wc;
+ r[1] = (unsigned char) (wc >> 8);
+ r[2] = (unsigned char) (wc >> 16);
+ r[3] = 0;
+ return 4;
}
else
- return RET_TOOSMALL;
+ return RET_TOOSMALL;
}
return RET_ILUNI;
}
@@ -276,173 +276,173 @@ utf32le_wctomb (unsigned char *r, ucs4_t wc, size_t n)
size_t
rpl_iconv (iconv_t cd,
- ICONV_CONST char **inbuf, size_t *inbytesleft,
- char **outbuf, size_t *outbytesleft)
+ ICONV_CONST char **inbuf, size_t *inbytesleft,
+ char **outbuf, size_t *outbytesleft)
#undef iconv
{
#if REPLACE_ICONV_UTF
switch ((uintptr_t) cd)
{
{
- int (*xxx_wctomb) (unsigned char *, ucs4_t, size_t);
-
- case (uintptr_t) _ICONV_UTF8_UTF16BE:
- xxx_wctomb = utf16be_wctomb;
- goto loop_from_utf8;
- case (uintptr_t) _ICONV_UTF8_UTF16LE:
- xxx_wctomb = utf16le_wctomb;
- goto loop_from_utf8;
- case (uintptr_t) _ICONV_UTF8_UTF32BE:
- xxx_wctomb = utf32be_wctomb;
- goto loop_from_utf8;
- case (uintptr_t) _ICONV_UTF8_UTF32LE:
- xxx_wctomb = utf32le_wctomb;
- goto loop_from_utf8;
+ int (*xxx_wctomb) (unsigned char *, ucs4_t, size_t);
+
+ case (uintptr_t) _ICONV_UTF8_UTF16BE:
+ xxx_wctomb = utf16be_wctomb;
+ goto loop_from_utf8;
+ case (uintptr_t) _ICONV_UTF8_UTF16LE:
+ xxx_wctomb = utf16le_wctomb;
+ goto loop_from_utf8;
+ case (uintptr_t) _ICONV_UTF8_UTF32BE:
+ xxx_wctomb = utf32be_wctomb;
+ goto loop_from_utf8;
+ case (uintptr_t) _ICONV_UTF8_UTF32LE:
+ xxx_wctomb = utf32le_wctomb;
+ goto loop_from_utf8;
loop_from_utf8:
- if (inbuf == NULL || *inbuf == NULL)
- return 0;
- {
- ICONV_CONST char *inptr = *inbuf;
- size_t inleft = *inbytesleft;
- char *outptr = *outbuf;
- size_t outleft = *outbytesleft;
- size_t res = 0;
- while (inleft > 0)
- {
- ucs4_t uc;
- int m = u8_mbtoucr (&uc, (const uint8_t *) inptr, inleft);
- if (m <= 0)
- {
- if (m == -1)
- {
- errno = EILSEQ;
- res = (size_t)(-1);
- break;
- }
- if (m == -2)
- {
- errno = EINVAL;
- res = (size_t)(-1);
- break;
- }
- abort ();
- }
- else
- {
- int n = xxx_wctomb ((uint8_t *) outptr, uc, outleft);
- if (n < 0)
- {
- if (n == RET_ILUNI)
- {
- errno = EILSEQ;
- res = (size_t)(-1);
- break;
- }
- if (n == RET_TOOSMALL)
- {
- errno = E2BIG;
- res = (size_t)(-1);
- break;
- }
- abort ();
- }
- else
- {
- inptr += m;
- inleft -= m;
- outptr += n;
- outleft -= n;
- }
- }
- }
- *inbuf = inptr;
- *inbytesleft = inleft;
- *outbuf = outptr;
- *outbytesleft = outleft;
- return res;
- }
+ if (inbuf == NULL || *inbuf == NULL)
+ return 0;
+ {
+ ICONV_CONST char *inptr = *inbuf;
+ size_t inleft = *inbytesleft;
+ char *outptr = *outbuf;
+ size_t outleft = *outbytesleft;
+ size_t res = 0;
+ while (inleft > 0)
+ {
+ ucs4_t uc;
+ int m = u8_mbtoucr (&uc, (const uint8_t *) inptr, inleft);
+ if (m <= 0)
+ {
+ if (m == -1)
+ {
+ errno = EILSEQ;
+ res = (size_t)(-1);
+ break;
+ }
+ if (m == -2)
+ {
+ errno = EINVAL;
+ res = (size_t)(-1);
+ break;
+ }
+ abort ();
+ }
+ else
+ {
+ int n = xxx_wctomb ((uint8_t *) outptr, uc, outleft);
+ if (n < 0)
+ {
+ if (n == RET_ILUNI)
+ {
+ errno = EILSEQ;
+ res = (size_t)(-1);
+ break;
+ }
+ if (n == RET_TOOSMALL)
+ {
+ errno = E2BIG;
+ res = (size_t)(-1);
+ break;
+ }
+ abort ();
+ }
+ else
+ {
+ inptr += m;
+ inleft -= m;
+ outptr += n;
+ outleft -= n;
+ }
+ }
+ }
+ *inbuf = inptr;
+ *inbytesleft = inleft;
+ *outbuf = outptr;
+ *outbytesleft = outleft;
+ return res;
+ }
}
{
- int (*xxx_mbtowc) (ucs4_t *, const unsigned char *, size_t);
-
- case (uintptr_t) _ICONV_UTF16BE_UTF8:
- xxx_mbtowc = utf16be_mbtowc;
- goto loop_to_utf8;
- case (uintptr_t) _ICONV_UTF16LE_UTF8:
- xxx_mbtowc = utf16le_mbtowc;
- goto loop_to_utf8;
- case (uintptr_t) _ICONV_UTF32BE_UTF8:
- xxx_mbtowc = utf32be_mbtowc;
- goto loop_to_utf8;
- case (uintptr_t) _ICONV_UTF32LE_UTF8:
- xxx_mbtowc = utf32le_mbtowc;
- goto loop_to_utf8;
+ int (*xxx_mbtowc) (ucs4_t *, const unsigned char *, size_t);
+
+ case (uintptr_t) _ICONV_UTF16BE_UTF8:
+ xxx_mbtowc = utf16be_mbtowc;
+ goto loop_to_utf8;
+ case (uintptr_t) _ICONV_UTF16LE_UTF8:
+ xxx_mbtowc = utf16le_mbtowc;
+ goto loop_to_utf8;
+ case (uintptr_t) _ICONV_UTF32BE_UTF8:
+ xxx_mbtowc = utf32be_mbtowc;
+ goto loop_to_utf8;
+ case (uintptr_t) _ICONV_UTF32LE_UTF8:
+ xxx_mbtowc = utf32le_mbtowc;
+ goto loop_to_utf8;
loop_to_utf8:
- if (inbuf == NULL || *inbuf == NULL)
- return 0;
- {
- ICONV_CONST char *inptr = *inbuf;
- size_t inleft = *inbytesleft;
- char *outptr = *outbuf;
- size_t outleft = *outbytesleft;
- size_t res = 0;
- while (inleft > 0)
- {
- ucs4_t uc;
- int m = xxx_mbtowc (&uc, (const uint8_t *) inptr, inleft);
- if (m <= 0)
- {
- if (m == RET_ILSEQ)
- {
- errno = EILSEQ;
- res = (size_t)(-1);
- break;
- }
- if (m == RET_TOOFEW)
- {
- errno = EINVAL;
- res = (size_t)(-1);
- break;
- }
- abort ();
- }
- else
- {
- int n = u8_uctomb ((uint8_t *) outptr, uc, outleft);
- if (n < 0)
- {
- if (n == -1)
- {
- errno = EILSEQ;
- res = (size_t)(-1);
- break;
- }
- if (n == -2)
- {
- errno = E2BIG;
- res = (size_t)(-1);
- break;
- }
- abort ();
- }
- else
- {
- inptr += m;
- inleft -= m;
- outptr += n;
- outleft -= n;
- }
- }
- }
- *inbuf = inptr;
- *inbytesleft = inleft;
- *outbuf = outptr;
- *outbytesleft = outleft;
- return res;
- }
+ if (inbuf == NULL || *inbuf == NULL)
+ return 0;
+ {
+ ICONV_CONST char *inptr = *inbuf;
+ size_t inleft = *inbytesleft;
+ char *outptr = *outbuf;
+ size_t outleft = *outbytesleft;
+ size_t res = 0;
+ while (inleft > 0)
+ {
+ ucs4_t uc;
+ int m = xxx_mbtowc (&uc, (const uint8_t *) inptr, inleft);
+ if (m <= 0)
+ {
+ if (m == RET_ILSEQ)
+ {
+ errno = EILSEQ;
+ res = (size_t)(-1);
+ break;
+ }
+ if (m == RET_TOOFEW)
+ {
+ errno = EINVAL;
+ res = (size_t)(-1);
+ break;
+ }
+ abort ();
+ }
+ else
+ {
+ int n = u8_uctomb ((uint8_t *) outptr, uc, outleft);
+ if (n < 0)
+ {
+ if (n == -1)
+ {
+ errno = EILSEQ;
+ res = (size_t)(-1);
+ break;
+ }
+ if (n == -2)
+ {
+ errno = E2BIG;
+ res = (size_t)(-1);
+ break;
+ }
+ abort ();
+ }
+ else
+ {
+ inptr += m;
+ inleft -= m;
+ outptr += n;
+ outleft -= n;
+ }
+ }
+ }
+ *inbuf = inptr;
+ *inbytesleft = inleft;
+ *outbuf = outptr;
+ *outbytesleft = outleft;
+ return res;
+ }
}
}
#endif