Index: src/OFString_UTF8.m ================================================================== --- src/OFString_UTF8.m +++ src/OFString_UTF8.m @@ -36,21 +36,32 @@ #import "OFOutOfRangeException.h" #import "of_asprintf.h" #import "unicode.h" -extern const of_char16_t of_iso_8859_2[128]; -extern const of_char16_t of_iso_8859_3[128]; -extern const of_char16_t of_iso_8859_15[128]; -extern const of_char16_t of_windows_1251[128]; -extern const of_char16_t of_windows_1252[128]; -extern const of_char16_t of_codepage_437[128]; -extern const of_char16_t of_codepage_850[128]; -extern const of_char16_t of_codepage_858[128]; -extern const of_char16_t of_mac_roman[128]; -extern const of_char16_t of_koi8_r[128]; -extern const of_char16_t of_koi8_u[128]; +extern const of_char16_t of_iso_8859_2_table[]; +extern const size_t of_iso_8859_2_table_offset; +extern const of_char16_t of_iso_8859_3_table[]; +extern const size_t of_iso_8859_3_table_offset; +extern const of_char16_t of_iso_8859_15_table[]; +extern const size_t of_iso_8859_15_table_offset; +extern const of_char16_t of_windows_1251_table[]; +extern const size_t of_windows_1251_table_offset; +extern const of_char16_t of_windows_1252_table[]; +extern const size_t of_windows_1252_table_offset; +extern const of_char16_t of_codepage_437_table[]; +extern const size_t of_codepage_437_table_offset; +extern const of_char16_t of_codepage_850_table[]; +extern const size_t of_codepage_850_table_offset; +extern const of_char16_t of_codepage_858_table[]; +extern const size_t of_codepage_858_table_offset; +extern const of_char16_t of_mac_roman_table[]; +extern const size_t of_mac_roman_table_offset; +extern const of_char16_t of_koi8_r_table[]; +extern const size_t of_koi8_r_table_offset; +extern const of_char16_t of_koi8_u_table[]; +extern const size_t of_koi8_u_table_offset; static inline int memcasecmp(const char *first, const char *second, size_t length) { for (size_t i = 0; i < length; i++) { @@ -220,11 +231,11 @@ { self = [super init]; @try { const of_char16_t *table; - size_t j; + size_t tableOffset, j; if (encoding == OF_STRING_ENCODING_UTF_8 && cStringLength >= 3 && memcmp(cString, "\xEF\xBB\xBF", 3) == 0) { cString += 3; @@ -292,99 +303,83 @@ return self; } switch (encoding) { +#define CASE(encoding, var) \ + case encoding: \ + table = var; \ + tableOffset = var##_offset; \ + break; #ifdef HAVE_ISO_8859_2 - case OF_STRING_ENCODING_ISO_8859_2: - table = of_iso_8859_2; - break; + CASE(OF_STRING_ENCODING_ISO_8859_2, of_iso_8859_2_table) #endif #ifdef HAVE_ISO_8859_3 - case OF_STRING_ENCODING_ISO_8859_3: - table = of_iso_8859_3; - break; + CASE(OF_STRING_ENCODING_ISO_8859_3, of_iso_8859_3_table) #endif #ifdef HAVE_ISO_8859_15 - case OF_STRING_ENCODING_ISO_8859_15: - table = of_iso_8859_15; - break; + CASE(OF_STRING_ENCODING_ISO_8859_15, of_iso_8859_15_table) #endif #ifdef HAVE_WINDOWS_1251 - case OF_STRING_ENCODING_WINDOWS_1251: - table = of_windows_1251; - break; + CASE(OF_STRING_ENCODING_WINDOWS_1251, of_windows_1251_table) #endif #ifdef HAVE_WINDOWS_1252 - case OF_STRING_ENCODING_WINDOWS_1252: - table = of_windows_1252; - break; + CASE(OF_STRING_ENCODING_WINDOWS_1252, of_windows_1252_table) #endif #ifdef HAVE_CODEPAGE_437 - case OF_STRING_ENCODING_CODEPAGE_437: - table = of_codepage_437; - break; + CASE(OF_STRING_ENCODING_CODEPAGE_437, of_codepage_437_table) #endif #ifdef HAVE_CODEPAGE_850 - case OF_STRING_ENCODING_CODEPAGE_850: - table = of_codepage_850; - break; + CASE(OF_STRING_ENCODING_CODEPAGE_850, of_codepage_850_table) #endif #ifdef HAVE_CODEPAGE_858 - case OF_STRING_ENCODING_CODEPAGE_858: - table = of_codepage_858; - break; + CASE(OF_STRING_ENCODING_CODEPAGE_858, of_codepage_858_table) #endif #ifdef HAVE_MAC_ROMAN - case OF_STRING_ENCODING_MAC_ROMAN: - table = of_mac_roman; - break; + CASE(OF_STRING_ENCODING_MAC_ROMAN, of_mac_roman_table) #endif #ifdef HAVE_KOI8_R - case OF_STRING_ENCODING_KOI8_R: - table = of_koi8_r; - break; + CASE(OF_STRING_ENCODING_KOI8_R, of_koi8_r_table) #endif #ifdef HAVE_KOI8_U - case OF_STRING_ENCODING_KOI8_U: - table = of_koi8_u; - break; + CASE(OF_STRING_ENCODING_KOI8_U, of_koi8_u_table) #endif +#undef CASE default: @throw [OFInvalidEncodingException exception]; } j = 0; for (size_t i = 0; i < cStringLength; i++) { + unsigned char character = (unsigned char)cString[i]; + of_unichar_t unichar; char buffer[4]; - of_unichar_t character; - size_t characterBytes; + size_t byteLength; - if (!(cString[i] & 0x80)) { + if (character < tableOffset) { _s->cString[j++] = cString[i]; continue; } - character = table[(uint8_t)cString[i] - 128]; + unichar = table[character - tableOffset]; - if (character == 0xFFFF) + if (unichar == 0xFFFF) @throw [OFInvalidEncodingException exception]; _s->isUTF8 = true; - characterBytes = of_string_utf8_encode(character, - buffer); + byteLength = of_string_utf8_encode(unichar, buffer); - if (characterBytes == 0) + if (byteLength == 0) @throw [OFInvalidEncodingException exception]; - _s->cStringLength += characterBytes - 1; + _s->cStringLength += byteLength - 1; _s->cString = [self resizeMemory: _s->cString size: _s->cStringLength + 1]; - memcpy(_s->cString + j, buffer, characterBytes); - j += characterBytes; + memcpy(_s->cString + j, buffer, byteLength); + j += byteLength; } _s->cString[_s->cStringLength] = 0; } @catch (id e) { [self release]; Index: src/encodings/codepage_437.m ================================================================== --- src/encodings/codepage_437.m +++ src/encodings/codepage_437.m @@ -16,11 +16,11 @@ #include "config.h" #import "OFString.h" -const of_char16_t of_codepage_437[128] = { +const of_char16_t of_codepage_437_table[] = { 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, @@ -34,10 +34,12 @@ 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 }; +const size_t of_codepage_437_table_offset = + 256 - (sizeof(of_codepage_437_table) / sizeof(*of_codepage_437_table)); bool of_unicode_to_codepage_437(const of_unichar_t *input, unsigned char *output, size_t length, bool lossy) { Index: src/encodings/codepage_850.m ================================================================== --- src/encodings/codepage_850.m +++ src/encodings/codepage_850.m @@ -16,11 +16,11 @@ #include "config.h" #import "OFString.h" -const of_char16_t of_codepage_850[128] = { +const of_char16_t of_codepage_850_table[] = { 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192, 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, @@ -34,10 +34,12 @@ 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4, 0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 }; +const size_t of_codepage_850_table_offset = + 256 - (sizeof(of_codepage_850_table) / sizeof(*of_codepage_850_table)); bool of_unicode_to_codepage_850(const of_unichar_t *input, unsigned char *output, size_t length, bool lossy) { Index: src/encodings/codepage_858.m ================================================================== --- src/encodings/codepage_858.m +++ src/encodings/codepage_858.m @@ -16,11 +16,11 @@ #include "config.h" #import "OFString.h" -const of_char16_t of_codepage_858[128] = { +const of_char16_t of_codepage_858_table[] = { 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192, 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, @@ -34,10 +34,12 @@ 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4, 0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 }; +const size_t of_codepage_858_table_offset = + 256 - (sizeof(of_codepage_858_table) / sizeof(*of_codepage_858_table)); bool of_unicode_to_codepage_858(const of_unichar_t *input, unsigned char *output, size_t length, bool lossy) { Index: src/encodings/iso_8859_15.m ================================================================== --- src/encodings/iso_8859_15.m +++ src/encodings/iso_8859_15.m @@ -16,15 +16,11 @@ #include "config.h" #import "OFString.h" -const of_char16_t of_iso_8859_15[128] = { - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, +const of_char16_t of_iso_8859_15_table[] = { 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AC, 0x00A5, 0x0160, 0x00A7, 0x0161, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x00B5, 0x00B6, 0x00B7, 0x017E, 0x00B9, 0x00BA, 0x00BB, 0x0152, 0x0153, 0x0178, 0x00BF, 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, @@ -34,10 +30,12 @@ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF }; +const size_t of_iso_8859_15_table_offset = + 256 - (sizeof(of_iso_8859_15_table) / sizeof(*of_iso_8859_15_table)); bool of_unicode_to_iso_8859_15(const of_unichar_t *input, unsigned char *output, size_t length, bool lossy) { Index: src/encodings/iso_8859_2.m ================================================================== --- src/encodings/iso_8859_2.m +++ src/encodings/iso_8859_2.m @@ -16,15 +16,11 @@ #include "config.h" #import "OFString.h" -const of_char16_t of_iso_8859_2[128] = { - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, +const of_char16_t of_iso_8859_2_table[] = { 0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, 0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B, 0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7, 0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C, 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, @@ -34,10 +30,12 @@ 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9 }; +const size_t of_iso_8859_2_table_offset = + 256 - (sizeof(of_iso_8859_2_table) / sizeof(*of_iso_8859_2_table)); bool of_unicode_to_iso_8859_2(const of_unichar_t *input, unsigned char *output, size_t length, bool lossy) { Index: src/encodings/iso_8859_3.m ================================================================== --- src/encodings/iso_8859_3.m +++ src/encodings/iso_8859_3.m @@ -16,15 +16,11 @@ #include "config.h" #import "OFString.h" -const of_char16_t of_iso_8859_3[128] = { - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, +const of_char16_t of_iso_8859_3_table[] = { 0x00A0, 0x0126, 0x02D8, 0x00A3, 0x00A4, 0xFFFF, 0x0124, 0x00A7, 0x00A8, 0x0130, 0x015E, 0x011E, 0x0134, 0x00AD, 0xFFFF, 0x017B, 0x00B0, 0x0127, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0125, 0x00B7, 0x00B8, 0x0131, 0x015F, 0x011F, 0x0135, 0x00BD, 0xFFFF, 0x017C, 0x00C0, 0x00C1, 0x00C2, 0xFFFF, 0x00C4, 0x010A, 0x0108, 0x00C7, @@ -34,10 +30,12 @@ 0x00E0, 0x00E1, 0x00E2, 0xFFFF, 0x00E4, 0x010B, 0x0109, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0xFFFF, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x0121, 0x00F6, 0x00F7, 0x011D, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x016D, 0x015D, 0x02D9 }; +const size_t of_iso_8859_3_table_offset = + 256 - (sizeof(of_iso_8859_3_table) / sizeof(*of_iso_8859_3_table)); bool of_unicode_to_iso_8859_3(const of_unichar_t *input, unsigned char *output, size_t length, bool lossy) { Index: src/encodings/koi8_r.m ================================================================== --- src/encodings/koi8_r.m +++ src/encodings/koi8_r.m @@ -16,11 +16,11 @@ #include "config.h" #import "OFString.h" -const of_char16_t of_koi8_r[128] = { +const of_char16_t of_koi8_r_table[] = { 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248, 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7, 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, @@ -34,10 +34,12 @@ 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A }; +const size_t of_koi8_r_table_offset = + 256 - (sizeof(of_koi8_r_table) / sizeof(*of_koi8_r_table)); bool of_unicode_to_koi8_r(const of_unichar_t *input, unsigned char *output, size_t length, bool lossy) { Index: src/encodings/koi8_u.m ================================================================== --- src/encodings/koi8_u.m +++ src/encodings/koi8_u.m @@ -16,11 +16,11 @@ #include "config.h" #import "OFString.h" -const of_char16_t of_koi8_u[128] = { +const of_char16_t of_koi8_u_table[] = { 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248, 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7, 0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457, @@ -34,10 +34,12 @@ 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A }; +const size_t of_koi8_u_table_offset = + 256 - (sizeof(of_koi8_u_table) / sizeof(*of_koi8_u_table)); bool of_unicode_to_koi8_u(const of_unichar_t *input, unsigned char *output, size_t length, bool lossy) { Index: src/encodings/mac_roman.m ================================================================== --- src/encodings/mac_roman.m +++ src/encodings/mac_roman.m @@ -16,11 +16,11 @@ #include "config.h" #import "OFString.h" -const of_char16_t of_mac_roman[128] = { +const of_char16_t of_mac_roman_table[] = { 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, @@ -34,10 +34,12 @@ 0x2021, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, 0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, 0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7 }; +const size_t of_mac_roman_table_offset = + 256 - (sizeof(of_mac_roman_table) / sizeof(*of_mac_roman_table)); bool of_unicode_to_mac_roman(const of_unichar_t *input, unsigned char *output, size_t length, bool lossy) { Index: src/encodings/windows_1251.m ================================================================== --- src/encodings/windows_1251.m +++ src/encodings/windows_1251.m @@ -16,11 +16,11 @@ #include "config.h" #import "OFString.h" -const of_char16_t of_windows_1251[128] = { +const of_char16_t of_windows_1251_table[] = { 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F, 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0xFFFF, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F, 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7, @@ -34,10 +34,12 @@ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F }; +const size_t of_windows_1251_table_offset = + 256 - (sizeof(of_windows_1251_table) / sizeof(*of_windows_1251_table)); bool of_unicode_to_windows_1251(const of_unichar_t *input, unsigned char *output, size_t length, bool lossy) { Index: src/encodings/windows_1252.m ================================================================== --- src/encodings/windows_1252.m +++ src/encodings/windows_1252.m @@ -16,11 +16,11 @@ #include "config.h" #import "OFString.h" -const of_char16_t of_windows_1252[128] = { +const of_char16_t of_windows_1252_table[] = { 0x20AC, 0xFFFF, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0xFFFF, 0x017D, 0xFFFF, 0xFFFF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0xFFFF, 0x017E, 0x0178, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, @@ -34,10 +34,12 @@ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF }; +const size_t of_windows_1252_table_offset = + 256 - (sizeof(of_windows_1252_table) / sizeof(*of_windows_1252_table)); bool of_unicode_to_windows_1252(const of_unichar_t *input, unsigned char *output, size_t length, bool lossy) {