From 38e0504c32d569d9eb5f18c2cc43c79e2cf2994b Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 28 Jun 2007 06:47:35 +0000 Subject: [PATCH] Okay, apparently the newer standard specifies char** for the inbuf parameter to iconv() (See http://lists.debian.org/debian-glibc/2004/05/msg00006.html) I'm casting in the general case, but I added a non-const codepath in case it matters on some platform. --- src/stdlib/SDL_iconv.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/stdlib/SDL_iconv.c b/src/stdlib/SDL_iconv.c index 1285f4916..245c4480c 100644 --- a/src/stdlib/SDL_iconv.c +++ b/src/stdlib/SDL_iconv.c @@ -34,7 +34,20 @@ size_t SDL_iconv(SDL_iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft) { - size_t retCode = iconv(cd, inbuf, inbytesleft, outbuf, outbytesleft); + size_t retCode; +#ifdef ICONV_REALLY_MODIFIES_INBUF + if ( inbuf && *inbuf && inbytesleft ) { + char *tmp = SDL_stack_alloc(char, *inbytesleft); + char *ptr = tmp; + retCode = iconv(cd, &ptr, inbytesleft, outbuf, outbytesleft); + inbuf += (ptr - tmp); + SDL_stack_free(tmp); + } else { + retCode = iconv(cd, NULL, inbytesleft, outbuf, outbytesleft); + } +#else + retCode = iconv(cd, (char **)inbuf, inbytesleft, outbuf, outbytesleft); +#endif if ( retCode == (size_t)-1 ) { switch(errno) { case E2BIG: