summaryrefslogtreecommitdiff
path: root/glib/gconvert.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2007-11-08 06:04:00 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2007-11-08 06:04:00 +0000
commitd30370454939e5c2533e2d79dd9a571853050376 (patch)
tree5cf527ac810e28dc6dcccb2c1121f7da84ec1d67 /glib/gconvert.c
parente24316997992859ea5e39f2f69f0b95fbe2b9c5f (diff)
downloadglib-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.c15
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)