/* Unicode character output to streams with locale dependent encoding.
- Copyright (C) 2000-2003, 2006, 2008-2009 Free Software Foundation, Inc.
+ Copyright (C) 2000-2003, 2006, 2008-2013 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "localcharset.h"
#include "unistr.h"
-#include "ignore-value.h"
/* When we pass a Unicode character to iconv(), we must pass it in a
suitable encoding. The standardized Unicode encodings are
Assumes that the locale doesn't change between two calls. */
long
unicode_to_mb (unsigned int code,
- long (*success) (const char *buf, size_t buflen,
- void *callback_arg),
- long (*failure) (unsigned int code, const char *msg,
- void *callback_arg),
- void *callback_arg)
+ long (*success) (const char *buf, size_t buflen,
+ void *callback_arg),
+ long (*failure) (unsigned int code, const char *msg,
+ void *callback_arg),
+ void *callback_arg)
{
static int initialized;
static int is_utf8;
is_utf8 = !strcmp (charset, UTF8_NAME);
#if HAVE_ICONV
if (!is_utf8)
- {
- utf8_to_local = iconv_open (charset, UTF8_NAME);
- if (utf8_to_local == (iconv_t)(-1))
- /* For an unknown encoding, assume ASCII. */
- utf8_to_local = iconv_open ("ASCII", UTF8_NAME);
- }
+ {
+ utf8_to_local = iconv_open (charset, UTF8_NAME);
+ if (utf8_to_local == (iconv_t)(-1))
+ /* For an unknown encoding, assume ASCII. */
+ utf8_to_local = iconv_open ("ASCII", UTF8_NAME);
+ }
#endif
initialized = 1;
}
{
#if HAVE_ICONV
if (utf8_to_local == (iconv_t)(-1))
- return failure (code, N_("iconv function not usable"), callback_arg);
+ return failure (code, N_("iconv function not usable"), callback_arg);
#else
return failure (code, N_("iconv function not available"), callback_arg);
#endif
/* Convert the character from UTF-8 to the locale's charset. */
res = iconv (utf8_to_local,
- (ICONV_CONST char **)&inptr, &inbytesleft,
- &outptr, &outbytesleft);
+ (ICONV_CONST char **)&inptr, &inbytesleft,
+ &outptr, &outbytesleft);
if (inbytesleft > 0 || res == (size_t)(-1)
- /* Irix iconv() inserts a NUL byte if it cannot convert. */
+ /* Irix iconv() inserts a NUL byte if it cannot convert. */
# if !defined _LIBICONV_VERSION && (defined sgi || defined __sgi)
- || (res > 0 && code != 0 && outptr - outbuf == 1 && *outbuf == '\0')
+ || (res > 0 && code != 0 && outptr - outbuf == 1 && *outbuf == '\0')
# endif
)
- return failure (code, NULL, callback_arg);
+ return failure (code, NULL, callback_arg);
/* Avoid glibc-2.1 bug and Solaris 7 bug. */
# if defined _LIBICONV_VERSION \
- || !((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) || defined __sun)
+ || !(((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) \
+ && !defined __UCLIBC__) \
+ || defined __sun)
/* Get back to the initial shift state. */
res = iconv (utf8_to_local, NULL, NULL, &outptr, &outbytesleft);
if (res == (size_t)(-1))
- return failure (code, NULL, callback_arg);
+ return failure (code, NULL, callback_arg);
# endif
return success (outbuf, outptr - outbuf, callback_arg);
conditions (STREAM is an open stream and not wide-character oriented)
when fwrite() returns a value != buflen it also sets STREAM's error
indicator. */
- ignore_value (fwrite (buf, 1, buflen, stream));
+ fwrite (buf, 1, buflen, stream);
return 0;
}
/* Simple failure callback that displays an error and exits. */
static long
exit_failure_callback (unsigned int code, const char *msg,
- void *callback_arg _UNUSED_PARAMETER_)
+ void *callback_arg _GL_UNUSED)
{
if (msg == NULL)
error (1, 0, _("cannot convert U+%04X to local character set"), code);
else
error (1, 0, _("cannot convert U+%04X to local character set: %s"), code,
- gettext (msg));
+ gettext (msg));
return -1;
}
ASCII, using the same notation as ISO C99 strings. */
static long
fallback_failure_callback (unsigned int code,
- const char *msg _UNUSED_PARAMETER_,
- void *callback_arg)
+ const char *msg _GL_UNUSED,
+ void *callback_arg)
{
FILE *stream = (FILE *) callback_arg;
print_unicode_char (FILE *stream, unsigned int code, int exit_on_error)
{
unicode_to_mb (code, fwrite_success_callback,
- exit_on_error
- ? exit_failure_callback
- : fallback_failure_callback,
- stream);
+ exit_on_error
+ ? exit_failure_callback
+ : fallback_failure_callback,
+ stream);
}