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) {
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;