diff options
author | Florian Weimer <fweimer@redhat.com> | 2016-10-26 10:44:50 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2016-10-26 13:05:48 +0200 |
commit | b9deb8ce2a72de8f74361ea10dd4c4b116458518 (patch) | |
tree | 8c953fc6bf1bde2a361d93f8b61be4243cdb6d33 /iconvdata/ibm939.c | |
parent | 68fc2ccc1aebc15b92e596b2bdc5605da1e25f3c (diff) | |
download | glibc-b9deb8ce2a72de8f74361ea10dd4c4b116458518.zip glibc-b9deb8ce2a72de8f74361ea10dd4c4b116458518.tar.gz glibc-b9deb8ce2a72de8f74361ea10dd4c4b116458518.tar.bz2 |
iconv: Avoid writable data and relocations in IBM charsets
The IBM930, IBM933, IBM935 and IBM939 converters defined lookup
tables which were not constant. They also contained an
unnecessary pointer indirection.
Diffstat (limited to 'iconvdata/ibm939.c')
-rw-r--r-- | iconvdata/ibm939.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/iconvdata/ibm939.c b/iconvdata/ibm939.c index c0a75f7..5122975 100644 --- a/iconvdata/ibm939.c +++ b/iconvdata/ibm939.c @@ -190,7 +190,6 @@ enum uint32_t ch = get32 (inptr); \ const struct gap *rp1 = __ucs4_to_ibm939sb_idx; \ const struct gap *rp2 = __ucs4_to_ibm939db_idx; \ - const char *cp; \ \ if (__glibc_unlikely (ch >= 0xffff)) \ { \ @@ -202,14 +201,16 @@ enum ++rp1; \ \ /* Use the UCS4 table for single byte. */ \ + unsigned char sbconv; \ if (__builtin_expect (ch < rp1->start, 0) \ - || (cp = __ucs4_to_ibm939sb[ch + rp1->idx], \ - __builtin_expect (cp[0], L'\1') == L'\0' && ch != '\0')) \ + || (sbconv = __ucs4_to_ibm939sb[ch + rp1->idx], \ + __builtin_expect (sbconv, L'\1') == L'\0' && ch != '\0')) \ { \ /* Use the UCS4 table for double byte. */ \ while (ch > rp2->end) \ ++rp2; \ \ + const char *cp; \ if (__builtin_expect (ch < rp2->start, 0) \ || (cp = __ucs4_to_ibm939db[ch + rp2->idx], \ __builtin_expect (cp[0], L'\1')==L'\0' && ch != '\0')) \ @@ -263,7 +264,7 @@ enum else if (ch == 0x5c) \ *outptr++ = 0xb2; \ else \ - *outptr++ = cp[0]; \ + *outptr++ = sbconv; \ } \ \ /* Now that we wrote the output increment the input pointer. */ \ |