From: Jeffrey Stedfast Date: Sat, 23 Apr 2011 02:26:18 +0000 (-0400) Subject: Another soptimization for g_convert() X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=936525f90eeb21cd30460210f13eb2d820b159b2;p=mono.git Another soptimization for g_convert() If we need to grow our buffer, instead of growing by 'inleft' bytes, grow by 2 * inleft bytes. --- diff --git a/eglib/src/gunicode.c b/eglib/src/gunicode.c index cb82409e57c..7215cb9e2eb 100644 --- a/eglib/src/gunicode.c +++ b/eglib/src/gunicode.c @@ -220,7 +220,7 @@ gchar * g_convert (const gchar *str, gssize len, const gchar *to_charset, const gchar *from_charset, gsize *bytes_read, gsize *bytes_written, GError **err) { - size_t outsize, outused, outleft, inleft, rc; + size_t outsize, outused, outleft, inleft, grow, rc; char *result, *outbuf, *inbuf; gboolean flush = FALSE; gboolean done = FALSE; @@ -258,9 +258,10 @@ g_convert (const gchar *str, gssize len, const gchar *to_charset, const gchar *f switch (errno) { case E2BIG: /* grow our result buffer */ + grow = MAX (inleft, 8) << 1; outused = outbuf - result; - outsize += MAX (inleft, 8); - outleft += MAX (inleft, 8); + outsize += grow; + outleft += grow; result = g_realloc (result, outsize + 4); outbuf = result + outused; break;