Mercurial > hg > octave-lojdl > gnulib-hg
changeset 7255:02d37bd4003c
(iconv_alloc): Call iconv with 2xNULL arguments, also to flush the state
storage.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Tue, 05 Sep 2006 11:51:57 +0000 |
parents | 10f2be3ea106 |
children | 58ebe5a656c7 |
files | lib/iconvme.c |
diffstat | 1 files changed, 42 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/iconvme.c +++ b/lib/iconvme.c @@ -193,6 +193,48 @@ } } +again2: + err = iconv (cd, NULL, NULL, &outp, &outbytes_remaining); + + if (err == (size_t) -1) + { + switch (errno) + { + case E2BIG: + { + size_t used = outp - dest; + size_t newsize = outbuf_size * 2; + char *newdest; + + if (newsize <= outbuf_size) + { + errno = ENOMEM; + have_error = 1; + goto out; + } + newdest = (char *) realloc (dest, newsize); + if (newdest == NULL) + { + errno = ENOMEM; + have_error = 1; + goto out; + } + dest = newdest; + outbuf_size = newsize; + + outp = dest + used; + outbytes_remaining = outbuf_size - used - 1; /* -1 for NUL */ + + goto again2; + } + break; + + default: + have_error = 1; + break; + } + } + *outp = '\0'; out: