summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2006-09-05 11:45:14 +0000
committerBruno Haible <bruno@clisp.org>2006-09-05 11:45:14 +0000
commitd50444df2498a9c9b165ed0497ea66485024a3cb (patch)
tree1f2d136e3288906e8e26205650fdc1ae52c19bc8
parent806eb8f532c08eaea060c35db4b7c823ea58d0fa (diff)
downloadgnulib-d50444df2498a9c9b165ed0497ea66485024a3cb.tar.gz
(iconv_string): No need to save and restore errno when iconv_alloc succeeded.
-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