Mercurial > sdl-ios-xcode
comparison src/stdlib/SDL_iconv.c @ 2135:0313af081a84
Merge iconv const changes from 1.2
I'm not entirely happy with them. Maybe the right way to go is to leave
SDL_iconv() taking a non-const inbuf? How often are we converting const
strings anyway?
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Thu, 28 Jun 2007 06:57:08 +0000 |
parents | c121d94672cb |
children | 5a1b6fe6e90f |
comparison
equal
deleted
inserted
replaced
2134:180fa05e98e2 | 2135:0313af081a84 |
---|---|
30 | 30 |
31 #include <errno.h> | 31 #include <errno.h> |
32 | 32 |
33 size_t | 33 size_t |
34 SDL_iconv(SDL_iconv_t cd, | 34 SDL_iconv(SDL_iconv_t cd, |
35 char **inbuf, size_t * inbytesleft, | 35 const char **inbuf, size_t * inbytesleft, |
36 char **outbuf, size_t * outbytesleft) | 36 char **outbuf, size_t * outbytesleft) |
37 { | 37 { |
38 size_t retCode = iconv(cd, inbuf, inbytesleft, outbuf, outbytesleft); | 38 size_t retCode; |
39 #ifdef ICONV_REALLY_MODIFIES_INBUF | |
40 if (inbuf && *inbuf && inbytesleft) { | |
41 char *tmp = SDL_stack_alloc(char, *inbytesleft); | |
42 char *ptr = tmp; | |
43 SDL_memcpy(tmp, inbuf, *inbytesleft); | |
44 retCode = iconv(cd, &ptr, inbytesleft, outbuf, outbytesleft); | |
45 inbuf += (ptr - tmp); | |
46 SDL_stack_free(tmp); | |
47 } else { | |
48 retCode = iconv(cd, NULL, inbytesleft, outbuf, outbytesleft); | |
49 } | |
50 #else | |
51 retCode = iconv(cd, (char **) inbuf, inbytesleft, outbuf, outbytesleft); | |
52 #endif | |
39 if (retCode == (size_t) - 1) { | 53 if (retCode == (size_t) - 1) { |
40 switch (errno) { | 54 switch (errno) { |
41 case E2BIG: | 55 case E2BIG: |
42 return SDL_ICONV_E2BIG; | 56 return SDL_ICONV_E2BIG; |
43 case EILSEQ: | 57 case EILSEQ: |
152 return (SDL_iconv_t) - 1; | 166 return (SDL_iconv_t) - 1; |
153 } | 167 } |
154 | 168 |
155 size_t | 169 size_t |
156 SDL_iconv(SDL_iconv_t cd, | 170 SDL_iconv(SDL_iconv_t cd, |
157 char **inbuf, size_t * inbytesleft, | 171 const char **inbuf, size_t * inbytesleft, |
158 char **outbuf, size_t * outbytesleft) | 172 char **outbuf, size_t * outbytesleft) |
159 { | 173 { |
160 /* For simplicity, we'll convert everything to and from UCS-4 */ | 174 /* For simplicity, we'll convert everything to and from UCS-4 */ |
161 char *src, *dst; | 175 const char *src; |
176 char *dst; | |
162 size_t srclen, dstlen; | 177 size_t srclen, dstlen; |
163 Uint32 ch; | 178 Uint32 ch = 0; |
164 size_t total; | 179 size_t total; |
165 | 180 |
166 if (!inbuf || !*inbuf) { | 181 if (!inbuf || !*inbuf) { |
167 /* Reset the context */ | 182 /* Reset the context */ |
168 return 0; | 183 return 0; |
753 } | 768 } |
754 | 769 |
755 #endif /* !HAVE_ICONV */ | 770 #endif /* !HAVE_ICONV */ |
756 | 771 |
757 char * | 772 char * |
758 SDL_iconv_string(const char *tocode, const char *fromcode, char *inbuf, | 773 SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf, |
759 size_t inbytesleft) | 774 size_t inbytesleft) |
760 { | 775 { |
761 SDL_iconv_t cd; | 776 SDL_iconv_t cd; |
762 char *string; | 777 char *string; |
763 size_t stringsize; | 778 size_t stringsize; |