summaryrefslogtreecommitdiff
path: root/lib/iconvme.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/iconvme.c')
-rw-r--r--lib/iconvme.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/lib/iconvme.c b/lib/iconvme.c
index 943380c035..0e3d7b5ccd 100644
--- a/lib/iconvme.c
+++ b/lib/iconvme.c
@@ -75,21 +75,24 @@ iconv_string (const char *str, const char *from_codeset,
dest = iconv_alloc (cd, str);
- {
- int save_errno = errno;
-
- if (iconv_close (cd) < 0 && dest)
- {
- int save_errno2 = errno;
- /* If we didn't have a real error before, make sure we restore
- the iconv_close error below. */
- free (dest);
- dest = NULL;
- errno = save_errno2;
- }
- else
- errno = save_errno;
- }
+ if (dest == NULL)
+ {
+ int saved_errno = errno;
+ iconv_close (cd);
+ errno = saved_errno;
+ }
+ else
+ {
+ if (iconv_close (cd) < 0)
+ {
+ int saved_errno2 = errno;
+ /* If we didn't have a real error before, make sure we restore
+ the iconv_close error below. */
+ free (dest);
+ dest = NULL;
+ errno = saved_errno2;
+ }
+ }
#else
errno = ENOSYS;
#endif