From 0a8c7535d538145bd8015bc908a9246bec07d815 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Mon, 6 Jul 2026 12:30:02 -0400 Subject: [PATCH] main.c: write test_iconv_untranslatable() --- main.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/main.c b/main.c index 1345e60..9ff48ee 100644 --- a/main.c +++ b/main.c @@ -391,6 +391,38 @@ int test_iconv_ignore_ignores_invalid() { * It is merely implied, but this should not be an error. */ int test_iconv_untranslatable() { + iconv_t cd; + const char* fromcode = "UTF-8"; + const char* tocode = "ASCII"; + + printf("%-60s", "iconv() untranslatable input is not an error..."); + if (_my_iconv_open(&cd, tocode, fromcode) == FAILURE) { + printf("ERROR (iconv_open)\n"); + return FAILURE; + } + + size_t insize = 2, outsize = 8; + char inbuf[2] = {0xC3, 0x96}; // ü + char outbuf[8] = {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; + } + + printf("OK (outbuf=%s)\n", outbuf); return SUCCESS; } -- 2.53.0