#include "cups-private.h"
void
_cupsLangPrintError(const char *prefix,
const char *message)
{
ssize_t bytes;
int last_errno;
char buffer[2048],
*bufptr,
output[8192];
_cups_globals_t *cg;
if (!message)
return;
last_errno = errno;
cg = _cupsGlobals();
if (!cg->lang_default)
cg->lang_default = cupsLangDefault();
if (prefix)
{
snprintf(buffer, sizeof(buffer), "%s:", prefix);
bufptr = buffer + strlen(buffer);
}
else
bufptr = buffer;
snprintf(bufptr, sizeof(buffer) - (size_t)(bufptr - buffer),
_cupsLangString(cg->lang_default, _("%s: %s")),
_cupsLangString(cg->lang_default, message), strerror(last_errno));
strlcat(buffer, "\n", sizeof(buffer));
bytes = cupsUTF8ToCharset(output, (cups_utf8_t *)buffer, sizeof(output),
cg->lang_default->encoding);
if (bytes > 0)
fwrite(output, 1, (size_t)bytes, stderr);
}
int
_cupsLangPrintFilter(
FILE *fp,
const char *prefix,
const char *message,
...)
{
ssize_t bytes;
char temp[2048],
buffer[2048],
output[8192];
va_list ap;
_cups_globals_t *cg;
if (!fp || !message)
return (-1);
cg = _cupsGlobals();
if (!cg->lang_default)
cg->lang_default = cupsLangDefault();
va_start(ap, message);
snprintf(temp, sizeof(temp), "%s: %s\n", prefix,
_cupsLangString(cg->lang_default, message));
vsnprintf(buffer, sizeof(buffer), temp, ap);
va_end(ap);
bytes = cupsUTF8ToCharset(output, (cups_utf8_t *)buffer, sizeof(output),
cg->lang_default->encoding);
if (bytes > 0)
return ((int)fwrite(output, 1, (size_t)bytes, fp));
else
return ((int)bytes);
}
int
_cupsLangPrintf(FILE *fp,
const char *message,
...)
{
ssize_t bytes;
char buffer[2048],
output[8192];
va_list ap;
_cups_globals_t *cg;
if (!fp || !message)
return (-1);
cg = _cupsGlobals();
if (!cg->lang_default)
cg->lang_default = cupsLangDefault();
va_start(ap, message);
vsnprintf(buffer, sizeof(buffer) - 1,
_cupsLangString(cg->lang_default, message), ap);
va_end(ap);
strlcat(buffer, "\n", sizeof(buffer));
bytes = cupsUTF8ToCharset(output, (cups_utf8_t *)buffer, sizeof(output),
cg->lang_default->encoding);
if (bytes > 0)
return ((int)fwrite(output, 1, (size_t)bytes, fp));
else
return ((int)bytes);
}
int
_cupsLangPuts(FILE *fp,
const char *message)
{
ssize_t bytes;
char output[8192];
_cups_globals_t *cg;
if (!fp || !message)
return (-1);
cg = _cupsGlobals();
if (!cg->lang_default)
cg->lang_default = cupsLangDefault();
bytes = cupsUTF8ToCharset(output,
(cups_utf8_t *)_cupsLangString(cg->lang_default,
message),
sizeof(output) - 4, cg->lang_default->encoding);
bytes += cupsUTF8ToCharset(output + bytes, (cups_utf8_t *)"\n", (int)(sizeof(output) - (size_t)bytes), cg->lang_default->encoding);
if (bytes > 0)
return ((int)fwrite(output, 1, (size_t)bytes, fp));
else
return ((int)bytes);
}
void
_cupsSetLocale(char *argv[])
{
int i;
char buffer[8192];
_cups_globals_t *cg;
#ifdef LC_TIME
const char *lc_time;
char new_lc_time[255],
*charset;
#endif
setlocale(LC_ALL, "");
#ifdef LC_TIME
if ((lc_time = setlocale(LC_TIME, NULL)) == NULL)
lc_time = setlocale(LC_ALL, NULL);
if (lc_time)
{
strlcpy(new_lc_time, lc_time, sizeof(new_lc_time));
if ((charset = strchr(new_lc_time, '.')) == NULL)
charset = new_lc_time + strlen(new_lc_time);
strlcpy(charset, ".UTF-8", sizeof(new_lc_time) - (size_t)(charset - new_lc_time));
}
else
strlcpy(new_lc_time, "C", sizeof(new_lc_time));
setlocale(LC_TIME, new_lc_time);
#endif
cg = _cupsGlobals();
if (!cg->lang_default)
cg->lang_default = cupsLangDefault();
if (cg->lang_default->encoding != CUPS_US_ASCII &&
cg->lang_default->encoding != CUPS_UTF8)
{
for (i = 1; argv[i]; i ++)
{
if (cupsCharsetToUTF8((cups_utf8_t *)buffer, argv[i], sizeof(buffer),
cg->lang_default->encoding) < 0)
continue;
if (strcmp(buffer, argv[i]))
argv[i] = strdup(buffer);
}
}
}