From d30370454939e5c2533e2d79dd9a571853050376 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 8 Nov 2007 06:04:00 +0000 Subject: [PATCH] Try harder to reset shift state with AIX iconv(). (#467537) 2007-11-08 Matthias Clasen * glib/gconvert.c (g_convert_with_iconv): Try harder to reset shift state with AIX iconv(). (#467537) svn path=/trunk/; revision=5821 --- ChangeLog | 5 +++++ glib/gconvert.c | 15 +++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 76263748..618e0c55 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-11-08 Matthias Clasen + + * glib/gconvert.c (g_convert_with_iconv): Try harder to reset + shift state with AIX iconv(). (#467537) + 2007-11-08 Matthias Clasen * configure.in: diff --git a/glib/gconvert.c b/glib/gconvert.c index ab0b18eb..31a021e8 100644 --- a/glib/gconvert.c +++ b/glib/gconvert.c @@ -573,13 +573,13 @@ g_convert_with_iconv (const gchar *str, gchar *dest; gchar *outp; const gchar *p; - const gchar *shift_p = NULL; gsize inbytes_remaining; gsize outbytes_remaining; gsize err; gsize outbuf_size; gboolean have_error = FALSE; gboolean done = FALSE; + gboolean reset = FALSE; g_return_val_if_fail (converter != (GIConv) -1, NULL); @@ -595,7 +595,10 @@ g_convert_with_iconv (const gchar *str, while (!done && !have_error) { - err = g_iconv (converter, (char **)&p, &inbytes_remaining, &outp, &outbytes_remaining); + if (reset) + err = g_iconv (converter, NULL, &inbytes_remaining, &outp, &outbytes_remaining); + else + err = g_iconv (converter, (char **)&p, &inbytes_remaining, &outp, &outbytes_remaining); if (err == (gsize) -1) { @@ -633,11 +636,10 @@ g_convert_with_iconv (const gchar *str, } else { - if (!shift_p) + if (!reset) { /* call g_iconv with NULL inbuf to cleanup shift state */ - shift_p = p; - p = NULL; + reset = TRUE; inbytes_remaining = 0; } else @@ -645,9 +647,6 @@ g_convert_with_iconv (const gchar *str, } } - if (shift_p) - p = shift_p; - *outp = '\0'; if (bytes_read) -- 2.34.1