* winduni.c (unicode_from_ascii): Don't declare variables
's' and 'w' if _WIN32. Use MultiByteToWideChar to set the unicode string len.
This commit is contained in:
parent
510a939ba7
commit
bcfb5d778f
2 changed files with 23 additions and 10 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2005-03-24 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
|
||||||
|
* winduni.c (unicode_from_ascii): Don't declare variables
|
||||||
|
's' and 'w' if _WIN32. Use MultiByteToWideChar to set the unicode
|
||||||
|
string len.
|
||||||
|
|
||||||
2005-03-24 Dmitry Diky <diwil@spec.ru>
|
2005-03-24 Dmitry Diky <diwil@spec.ru>
|
||||||
|
|
||||||
* MAINTAINERS: Add myself as MSP430 maintainer.
|
* MAINTAINERS: Add myself as MSP430 maintainer.
|
||||||
|
|
|
@ -43,25 +43,32 @@ void
|
||||||
unicode_from_ascii (int *length, unichar **unicode, const char *ascii)
|
unicode_from_ascii (int *length, unichar **unicode, const char *ascii)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
|
#ifndef _WIN32
|
||||||
const char *s;
|
const char *s;
|
||||||
unsigned short *w;
|
unsigned short *w;
|
||||||
|
|
||||||
len = strlen (ascii);
|
len = strlen (ascii);
|
||||||
|
|
||||||
if (length != NULL)
|
|
||||||
*length = len;
|
|
||||||
|
|
||||||
*unicode = ((unichar *) res_alloc ((len + 1) * sizeof (unichar)));
|
*unicode = ((unichar *) res_alloc ((len + 1) * sizeof (unichar)));
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
/* FIXME: On Windows, we should be using MultiByteToWideChar to set
|
|
||||||
the length. */
|
|
||||||
MultiByteToWideChar (CP_ACP, 0, ascii, len + 1, *unicode, len + 1);
|
|
||||||
#else
|
|
||||||
for (s = ascii, w = *unicode; *s != '\0'; s++, w++)
|
for (s = ascii, w = *unicode; *s != '\0'; s++, w++)
|
||||||
*w = *s & 0xff;
|
*w = *s & 0xff;
|
||||||
*w = 0;
|
*w = 0;
|
||||||
|
#else
|
||||||
|
/* We use MultiByteToWideChar rather than strlen to get the unicode
|
||||||
|
string length to allow multibyte "ascii" chars. The value returned
|
||||||
|
by this function includes the trailing '\0'. */
|
||||||
|
len = MultiByteToWideChar (CP_ACP, 0, ascii, -1, NULL, 0);
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
|
*unicode = ((unichar *) res_alloc (len * sizeof (unichar)));
|
||||||
|
MultiByteToWideChar (CP_ACP, 0, ascii, -1, *unicode, len);
|
||||||
|
}
|
||||||
|
/* Discount the trailing '/0'. If MultiByteToWideChar failed,
|
||||||
|
this will set *length to -1. */
|
||||||
|
len--;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (length != NULL)
|
||||||
|
*length = len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Print the unicode string UNICODE to the file E. LENGTH is the
|
/* Print the unicode string UNICODE to the file E. LENGTH is the
|
||||||
|
|
Loading…
Add table
Reference in a new issue