diff --git a/eglib/src/giconv.c b/eglib/src/giconv.c index 9fe0edd3324fc..55e2e8a62b8f8 100644 --- a/eglib/src/giconv.c +++ b/eglib/src/giconv.c @@ -180,8 +180,22 @@ g_iconv (GIConv cd, gchar **inbytes, gsize *inbytesleft, int rc = 0; #ifdef HAVE_ICONV - if (cd->cd != (iconv_t) -1) - return iconv (cd->cd, inbytes, inbytesleft, outbytes, outbytesleft); + if (cd->cd != (iconv_t) -1) { + /* Note: gsize may have a different size than size_t, so we need to + remap inbytesleft and outbytesleft to size_t's. */ + size_t *outleftptr; + + if (outbytesleft) { + outleft = *outbytesleft; + outleftptr = &outleft; + } else { + outleftptr = NULL; + } + + inleft = inbytesleft ? *inbytesleft : 0; + + return iconv (cd->cd, inbytes, &inleft, outbytes, outleftptr); + } #endif if (outbytes == NULL || outbytesleft == NULL) { diff --git a/eglib/src/gstring.c b/eglib/src/gstring.c index 9df5d73c28ef8..ba75789bc8078 100644 --- a/eglib/src/gstring.c +++ b/eglib/src/gstring.c @@ -235,9 +235,8 @@ g_string_truncate (GString *string, gsize len) g_return_val_if_fail (string != NULL, string); /* Silent return */ - if (len < 0 || len >= string->len) { + if (len >= string->len) return string; - } string->len = len; string->str[len] = 0;