#include #include #include #include #define T(x) ((x) || (e+=fail(r, errno, i, j, out1, pout, outb, #x))) int fail(int r, int err, int i, int j, char *start, char *end, size_t rem, char *pred) { printf("%.2x %.2x: returned %d (%s), start %p end %p rem %zu: failed assertion: %s\n", i, j, r, r<0?strerror(err):"", start, end, rem, pred); return 1; } int main() { iconv_t cd = iconv_open("UTF-8", "EUC-KR"); int e = 0; for (int i=0; i<256; i++) for (int j=0; j<256; j++) { char in[3] = { i, j, 'x' }; char out[12] = "", *out1=out+4; char *pin = in, *pout = out1; size_t inb = sizeof in; size_t outb = sizeof out - (out1-out); errno = 0; size_t r = iconv(cd, &pin, &inb, &pout, &outb); T(pout>=out1 && pout