diff options
author | Matthias Clasen <mclasen@redhat.com> | 2007-11-08 06:04:00 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2007-11-08 06:04:00 +0000 |
commit | d30370454939e5c2533e2d79dd9a571853050376 (patch) | |
tree | 5cf527ac810e28dc6dcccb2c1121f7da84ec1d67 /glib/gconvert.c | |
parent | e24316997992859ea5e39f2f69f0b95fbe2b9c5f (diff) | |
download | glib-d30370454939e5c2533e2d79dd9a571853050376.tar.gz |
Try harder to reset shift state with AIX iconv(). (#467537)
2007-11-08 Matthias Clasen <mclasen@redhat.com>
* glib/gconvert.c (g_convert_with_iconv): Try harder to reset
shift state with AIX iconv(). (#467537)
svn path=/trunk/; revision=5821
Diffstat (limited to 'glib/gconvert.c')
-rw-r--r-- | glib/gconvert.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/glib/gconvert.c b/glib/gconvert.c index ab0b18ebd..31a021e83 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) |