From 64188f1fcf31f098956558fff536636bc01194b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Tue, 18 Nov 2014 22:28:31 +0100 Subject: [PATCH] Revert "Don't bother with endianity" It makes iconv() output the byte order mark first... --- termo.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/termo.c b/termo.c index a9addc4..063a5a7 100644 --- a/termo.c +++ b/termo.c @@ -330,9 +330,14 @@ termo_init (termo_t *tk, const char *term, const char *encoding) if (!encoding) encoding = nl_langinfo (CODESET); - if ((tk->to_utf32_conv = iconv_open ("UTF-32", encoding)) == (iconv_t) -1) + // If we don't specify the endianity, iconv() outputs the BOM first + static const uint16_t endianity = 0x0102; + const char *utf32 = (*(uint8_t *) &endianity == 0x01) + ? "UTF-32BE" : "UTF-32LE"; + + if ((tk->to_utf32_conv = iconv_open (utf32, encoding)) == (iconv_t) -1) return 0; - if ((tk->from_utf32_conv = iconv_open (encoding, "UTF-32")) == (iconv_t) -1) + if ((tk->from_utf32_conv = iconv_open (encoding, utf32)) == (iconv_t) -1) goto abort_free_to_utf32; tk->buffer = malloc (tk->buffsize);