From bcfb5d778fc726dc7b75a402dba027fb4b88f02a Mon Sep 17 00:00:00 2001 From: Danny Smith Date: Thu, 24 Mar 2005 21:26:21 +0000 Subject: [PATCH] * winduni.c (unicode_from_ascii): Don't declare variables 's' and 'w' if _WIN32. Use MultiByteToWideChar to set the unicode string len. --- binutils/ChangeLog | 6 ++++++ binutils/winduni.c | 27 +++++++++++++++++---------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index ac48705d586..0e555349623 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,9 @@ +2005-03-24 Danny Smith + + * 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 * MAINTAINERS: Add myself as MSP430 maintainer. diff --git a/binutils/winduni.c b/binutils/winduni.c index 65bc6085f33..41cfcfc1b13 100644 --- a/binutils/winduni.c +++ b/binutils/winduni.c @@ -43,25 +43,32 @@ void unicode_from_ascii (int *length, unichar **unicode, const char *ascii) { int len; +#ifndef _WIN32 const char *s; unsigned short *w; len = strlen (ascii); - - if (length != NULL) - *length = len; - *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++) *w = *s & 0xff; *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 + + if (length != NULL) + *length = len; } /* Print the unicode string UNICODE to the file E. LENGTH is the -- 2.30.2