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;
}
if (non_identical_discard == SUCCESS) {
- //result |= test_nid_drops_untranslatable();
+ result |= test_nid_drops_untranslatable();
//result |= test_nid_fails_on_incomplete_multibyte();
}