/*
- * "$Id: transcode.c 9306 2010-09-16 21:43:57Z mike $"
+ * "$Id$"
*
* Transcoding support for CUPS.
*
const cups_encoding_t encoding) /* I - Encoding */
{
cups_utf8_t *destptr; /* Pointer into UTF-8 buffer */
-#ifdef HAVE_ICONV_H
+#ifdef HAVE_ICONV_H
size_t srclen, /* Length of source string */
outBytesLeft; /* Bytes remaining in output buffer */
#endif /* HAVE_ICONV_H */
if (map_to_utf8 != (iconv_t)-1)
{
+ char *altdestptr = (char *)dest; /* Silence bogus GCC type-punned */
+
srclen = strlen(src);
outBytesLeft = maxout - 1;
- iconv(map_to_utf8, (char **)&src, &srclen, (char **)&destptr,
- &outBytesLeft);
- *destptr = '\0';
+ iconv(map_to_utf8, (char **)&src, &srclen, &altdestptr, &outBytesLeft);
+ *altdestptr = '\0';
_cupsMutexUnlock(&map_mutex);
- return ((int)(destptr - dest));
+ return ((int)(altdestptr - (char *)dest));
}
_cupsMutexUnlock(&map_mutex);
const cups_encoding_t encoding) /* I - Encoding */
{
char *destptr; /* Pointer into destination */
-#ifdef HAVE_ICONV_H
+#ifdef HAVE_ICONV_H
size_t srclen, /* Length of source string */
outBytesLeft; /* Bytes remaining in output buffer */
#endif /* HAVE_ICONV_H */
* Handle identity conversions...
*/
- if (encoding == CUPS_UTF8 || encoding <= CUPS_US_ASCII ||
+ if (encoding == CUPS_UTF8 ||
encoding >= CUPS_ENCODING_VBCS_END)
{
strlcpy(dest, (char *)src, maxout);
destptr = dest;
- if (encoding == CUPS_ISO8859_1)
+ if (encoding == CUPS_ISO8859_1 || encoding <= CUPS_US_ASCII)
{
- int ch; /* Character from string */
+ int ch, /* Character from string */
+ maxch; /* Maximum character for charset */
char *destend; /* End of ISO-8859-1 buffer */
-
+ maxch = encoding == CUPS_ISO8859_1 ? 256 : 128;
destend = dest + maxout - 1;
while (*src && destptr < destend)
{
ch = ((ch & 0x1f) << 6) | (*src++ & 0x3f);
- if (ch < 256)
+ if (ch < maxch)
*destptr++ = ch;
else
*destptr++ = '?';
if (map_from_utf8 != (iconv_t)-1)
{
+ char *altsrc = (char *)src; /* Silence bogus GCC type-punned */
+
srclen = strlen((char *)src);
outBytesLeft = maxout - 1;
- iconv(map_from_utf8, (char **)&src, &srclen, &destptr, &outBytesLeft);
+ iconv(map_from_utf8, &altsrc, &srclen, &destptr, &outBytesLeft);
*destptr = '\0';
_cupsMutexUnlock(&map_mutex);
/*
- * End of "$Id: transcode.c 9306 2010-09-16 21:43:57Z mike $"
+ * End of "$Id$"
*/