PR 10165
authorNick Clifton <nickc@redhat.com>
Tue, 9 Jun 2009 15:14:23 +0000 (15:14 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 9 Jun 2009 15:14:23 +0000 (15:14 +0000)
        * winduni.c (wind_MultiByteToWideChar): Do not pass MB_PRECOMPOSED
        to MultiByteToWideChar when using the CP_UTF8 or CO_UTF7 types.

binutils/ChangeLog
binutils/winduni.c

index dc4f09b8b849c4564390be89024cdff951dd4135..b0a9be5be328cba93bac3af21c91fa519b7ace70 100644 (file)
@@ -1,3 +1,9 @@
+2009-06-09  Tom Bramer  <tjb@postpro.net>
+
+       PR 10165
+       * winduni.c (wind_MultiByteToWideChar): Do not pass MB_PRECOMPOSED
+       to MultiByteToWideChar when using the CP_UTF8 or CO_UTF7 types.
+
 2009-06-04  Alan Modra  <amodra@bigpond.net.au>
 
        * strings.c (main): Delay parsing of decimal digits.
index f811de7d73256bfd9897e329607b863c7d8ba979..8b39af1f5956ae541b37ee4f8c5c927d26a271d8 100644 (file)
@@ -661,7 +661,15 @@ wind_MultiByteToWideChar (rc_uint_type cp, const char *mb,
   rc_uint_type ret = 0;
 
 #if defined (_WIN32) || defined (__CYGWIN__)
-  ret = (rc_uint_type) MultiByteToWideChar (cp, MB_PRECOMPOSED,
+  rc_uint_type conv_flags = MB_PRECOMPOSED;
+
+  /* MB_PRECOMPOSED is not allowed for UTF-7 or UTF-8.  
+     MultiByteToWideChar will set the last error to
+     ERROR_INVALID_FLAGS if we do. */
+  if (cp == CP_UTF8 || cp == CP_UTF7)
+    conv_flags = 0;
+
+  ret = (rc_uint_type) MultiByteToWideChar (cp, conv_flags,
                                            mb, -1, u, u_len);
   /* Convert to bytes. */
   ret *= sizeof (unichar);