Mercurial > sdl-ios-xcode
diff src/stdlib/SDL_iconv.c @ 2136:5a1b6fe6e90f
iconv() doesn't write to the data, just make compilers happy
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Thu, 28 Jun 2007 08:35:35 +0000 |
parents | 0313af081a84 |
children | ca80c942e69c |
line wrap: on
line diff
--- a/src/stdlib/SDL_iconv.c Thu Jun 28 06:57:08 2007 +0000 +++ b/src/stdlib/SDL_iconv.c Thu Jun 28 08:35:35 2007 +0000 @@ -28,6 +28,15 @@ #ifdef HAVE_ICONV +/* Depending on which standard the iconv() was implemented with, + iconv() may or may not use const char ** for the inbuf param. + If we get this wrong, it's just a warning, so no big deal. +*/ +#if defined(_XGP6) || \ + defined(__GLIBC__) && ((__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) +#define ICONV_INBUF_NONCONST +#endif + #include <errno.h> size_t @@ -36,19 +45,10 @@ char **outbuf, size_t * outbytesleft) { size_t retCode; -#ifdef ICONV_REALLY_MODIFIES_INBUF - if (inbuf && *inbuf && inbytesleft) { - char *tmp = SDL_stack_alloc(char, *inbytesleft); - char *ptr = tmp; - SDL_memcpy(tmp, inbuf, *inbytesleft); - retCode = iconv(cd, &ptr, inbytesleft, outbuf, outbytesleft); - inbuf += (ptr - tmp); - SDL_stack_free(tmp); - } else { - retCode = iconv(cd, NULL, inbytesleft, outbuf, outbytesleft); - } +#ifdef ICONV_INBUF_NONCONST + retCode = iconv(cd, (char **) inbuf, inbytesleft, outbuf, outbytesleft); #else - retCode = iconv(cd, (char **) inbuf, inbytesleft, outbuf, outbytesleft); + retCode = iconv(cd, inbuf, inbytesleft, outbuf, outbytesleft); #endif if (retCode == (size_t) - 1) { switch (errno) {