diff --git a/src/iri.c b/src/iri.c index 9b16639..da9dc7f 100644 --- a/src/iri.c +++ b/src/iri.c @@ -183,17 +183,12 @@ do_conversion (iconv_t cd, char *in, size_t inlen, char **out) } else if (errno == E2BIG) /* Output buffer full */ { - char *new; - tooshort++; done = len; - outlen = done + inlen * 2; - new = xmalloc (outlen + 1); - memcpy (new, s, done); - xfree (s); - s = new; - len = outlen; - *out = s + done; + len = done + inlen * 2; + s = xrealloc (s, len + 1); + *out = s + done - outlen; + outlen += inlen * 2; } else /* Weird, we got an unspecified error */ {