diff options
author | Bruno Haible <bruno@clisp.org> | 2006-09-05 11:45:14 +0000 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2006-09-05 11:45:14 +0000 |
commit | d50444df2498a9c9b165ed0497ea66485024a3cb (patch) | |
tree | 1f2d136e3288906e8e26205650fdc1ae52c19bc8 | |
parent | 806eb8f532c08eaea060c35db4b7c823ea58d0fa (diff) | |
download | gnulib-d50444df2498a9c9b165ed0497ea66485024a3cb.tar.gz |
(iconv_string): No need to save and restore errno when iconv_alloc succeeded.
-rw-r--r-- | lib/iconvme.c | 33 |
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 |