X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;ds=sidebyside;f=gedcom%2Fencoding.c;h=36f88f3bca4a0b81ad9db73d31218a3cbe6b81b9;hb=40b99549ec69cb65fc3b979c6383bed5b88af7f4;hp=b5e2b40b148d99ae0a7e8cfca253bd5f6fb30d15;hpb=d2035760540dc564416171d40196bfc364b82e54;p=gedcom-parse.git diff --git a/gedcom/encoding.c b/gedcom/encoding.c index b5e2b40..36f88f3 100644 --- a/gedcom/encoding.c +++ b/gedcom/encoding.c @@ -237,22 +237,26 @@ static size_t conv_buf_size; int open_conv_to_internal(const char* fromcode) { + iconv_t new_cd_to_internal; const char *encoding = get_encoding(fromcode, the_enc); - if (cd_to_internal != (iconv_t) -1) - iconv_close(cd_to_internal); if (encoding == NULL) { - cd_to_internal = (iconv_t) -1; + new_cd_to_internal = (iconv_t) -1; } else { memset(conv_buf, 0, sizeof(conv_buf)); conv_buf_size = 0; - cd_to_internal = iconv_open(INTERNAL_ENCODING, encoding); - if (cd_to_internal == (iconv_t) -1) { + new_cd_to_internal = iconv_open(INTERNAL_ENCODING, encoding); + if (new_cd_to_internal == (iconv_t) -1) { gedcom_error(_("Error opening conversion context for encoding %s: %s"), encoding, strerror(errno)); } } - return (cd_to_internal != (iconv_t) -1); + if (new_cd_to_internal != (iconv_t) -1) { + if (cd_to_internal != (iconv_t) -1) + iconv_close(cd_to_internal); + cd_to_internal = new_cd_to_internal; + } + return (new_cd_to_internal != (iconv_t) -1); } void close_conv_to_internal()