X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fencoding.c;h=980e4cfcac00f5b2d3855346eb01d14370d3a147;hp=e0f4e2d06666521b367b39e928f485fda7d6c3bd;hb=687d07120a2d543f02bffe88efdf9583fbab1459;hpb=16176f3b7ce78da85646e814bd2f3ffe5babb82b diff --git a/src/encoding.c b/src/encoding.c index e0f4e2d0..980e4cfc 100644 --- a/src/encoding.c +++ b/src/encoding.c @@ -101,6 +101,11 @@ put_iconv(iconv_t *cd) errno = errno_save; } +/* Prevent printing an error message if a character conversion error occurs + * while printing an error message. (This variable is not per-thread but it + * doesn't matter too much since it's just the error messages.) */ +static bool error_message_being_printed = false; + #define DEFINE_CHAR_CONVERSION_FUNCTIONS(varname1, longname1, chartype1,\ varname2, longname2, chartype2,\ worst_case_len_expr, \ @@ -128,7 +133,11 @@ varname1##_to_##varname2##_nbytes(const chartype1 *in, size_t in_nbytes,\ \ len = iconv(*cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); \ if (len == (size_t)-1) { \ - err_msg; \ + if (!error_message_being_printed) { \ + error_message_being_printed = true; \ + err_msg; \ + error_message_being_printed = false; \ + } \ ret = err_return; \ } else { \ *out_nbytes_ret = sizeof(buf) - outbytesleft; \