aboutsummaryrefslogtreecommitdiff
path: root/iconvdata/iso-2022-jp.c
diff options
context:
space:
mode:
Diffstat (limited to 'iconvdata/iso-2022-jp.c')
-rw-r--r--iconvdata/iso-2022-jp.c108
1 files changed, 57 insertions, 51 deletions
diff --git a/iconvdata/iso-2022-jp.c b/iconvdata/iso-2022-jp.c
index 5e4ddaa441..18a89cd16a 100644
--- a/iconvdata/iso-2022-jp.c
+++ b/iconvdata/iso-2022-jp.c
@@ -708,25 +708,29 @@ static const cvlist_t conversion_lists[4] =
} \
else if (set2 == ISO88597_set) \
{ \
- const struct gap *rp = from_idx; \
- \
- while (ch > rp->end) \
- ++rp; \
- if (ch >= rp->start) \
+ if (__builtin_expect (ch < 0xffff, 1)) \
{ \
- unsigned char res = iso88597_from_ucs4[ch - 0xa0 + rp->idx]; \
- if (res != '\0') \
+ const struct gap *rp = from_idx; \
+ \
+ while (ch > rp->end) \
+ ++rp; \
+ if (ch >= rp->start) \
{ \
- if (__builtin_expect (outptr + 3 > outend, 0)) \
+ unsigned char res = \
+ iso88597_from_ucs4[ch - 0xa0 + rp->idx]; \
+ if (res != '\0') \
{ \
- result = __GCONV_FULL_OUTPUT; \
- break; \
- } \
+ if (__builtin_expect (outptr + 3 > outend, 0)) \
+ { \
+ result = __GCONV_FULL_OUTPUT; \
+ break; \
+ } \
\
- *outptr++ = ESC; \
- *outptr++ = 'N'; \
- *outptr++ = res; \
- written = 3; \
+ *outptr++ = ESC; \
+ *outptr++ = 'N'; \
+ *outptr++ = res; \
+ written = 3; \
+ } \
} \
} \
} \
@@ -817,43 +821,45 @@ static const cvlist_t conversion_lists[4] =
} \
\
/* Try ISO 8859-7 upper half. */ \
- { \
- const struct gap *rp = from_idx; \
+ if (__builtin_expect (ch < 0xffff, 1)) \
+ { \
+ const struct gap *rp = from_idx; \
\
- while (ch > rp->end) \
- ++rp; \
- if (ch >= rp->start) \
- { \
- unsigned char res = \
- iso88597_from_ucs4[ch - 0xa0 + rp->idx]; \
- if (res != '\0') \
- { \
- if (set2 != ISO88597_set) \
- { \
- if (__builtin_expect (outptr + 3 > outend, 0))\
- { \
- result = __GCONV_FULL_OUTPUT; \
- break; \
- } \
- *outptr++ = ESC; \
- *outptr++ = '.'; \
- *outptr++ = 'F'; \
- set2 = ISO88597_set; \
- } \
- \
- if (__builtin_expect (outptr + 3 > outend, 0)) \
- { \
- result = __GCONV_FULL_OUTPUT; \
- break; \
- } \
- *outptr++ = ESC; \
- *outptr++ = 'N'; \
- *outptr++ = res; \
- result = __GCONV_OK; \
- break; \
- } \
- } \
- } \
+ while (ch > rp->end) \
+ ++rp; \
+ if (ch >= rp->start) \
+ { \
+ unsigned char res = \
+ iso88597_from_ucs4[ch - 0xa0 + rp->idx]; \
+ if (res != '\0') \
+ { \
+ if (set2 != ISO88597_set) \
+ { \
+ if (__builtin_expect (outptr + 3 > outend, \
+ 0)) \
+ { \
+ result = __GCONV_FULL_OUTPUT; \
+ break; \
+ } \
+ *outptr++ = ESC; \
+ *outptr++ = '.'; \
+ *outptr++ = 'F'; \
+ set2 = ISO88597_set; \
+ } \
+ \
+ if (__builtin_expect (outptr + 3 > outend, 0)) \
+ { \
+ result = __GCONV_FULL_OUTPUT; \
+ break; \
+ } \
+ *outptr++ = ESC; \
+ *outptr++ = 'N'; \
+ *outptr++ = res; \
+ result = __GCONV_OK; \
+ break; \
+ } \
+ } \
+ } \
\
break; \
\