From: Michael Orlitzky Date: Mon, 6 Jul 2026 23:16:22 +0000 (-0400) Subject: main.c: add test_nid_drops_untranslatable() X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=d2ffedc1fa9d19b743a34533a2a8a09a7f30615b;p=iconv-quirks.git main.c: add test_nid_drops_untranslatable() --- diff --git a/main.c b/main.c index 763f831..631fbb5 100644 --- a/main.c +++ b/main.c @@ -466,6 +466,47 @@ static int test_translit_does_not_fail_on_untranslatable() { return SUCCESS; } +static int test_nid_drops_untranslatable() { + iconv_t cd; + const char* fromcode = "UTF-8"; + const char* tocode = "ASCII//NON_IDENTICAL_DISCARD"; + + printf("%-60s", "iconv() with //NON_IDENTICAL_DISCARD discards..."); + if (_my_iconv_open(&cd, tocode, fromcode) == FAILURE) { + printf("ERROR (iconv_open)\n"); + return FAILURE; + } + + size_t insize = 4, outsize = 10; + char inbuf[4] = {'h', 0xC3, 0x96, 'i'}; // hüi + char outbuf[10] = {0}; + char* inptr = inbuf; + char* outptr = outbuf; + + size_t result = iconv(cd, &inptr, &insize, &outptr, &outsize); + + if (result == (size_t)(-1)) { + int saved_errno = errno; // iconv_close() clobbers it + + if (_my_iconv_close(&cd) == FAILURE) { + printf("ERROR (iconv_close)\n"); + } + else { + printf("FAIL (%s)\n", ERRNO_STR(saved_errno)); + } + + return FAILURE; + } + + if (strcmp(outbuf, "hi") != 0) { + printf("FAIL (outbuf=%s)\n", outbuf); + return FAILURE; + } + + printf("OK\n", outbuf); + return SUCCESS; +} + int main(int argc, char** argv) { int result = SUCCESS; @@ -510,7 +551,7 @@ int main(int argc, char** argv) { } if (non_identical_discard == SUCCESS) { - //result |= test_nid_drops_untranslatable(); + result |= test_nid_drops_untranslatable(); //result |= test_nid_fails_on_incomplete_multibyte(); }