--- bfd/bfd_peXXigen.c.old	2014-12-28 17:28:15.000000000 +0100
+++ bfd/bfd_peXXigen.c	2014-12-28 17:41:06.000000000 +0100
@@ -65,6 +65,9 @@
 #ifdef HAVE_WCHAR_H
 #include <wchar.h>
 #endif
+#ifdef HAVE_WCTYPE_H
+#include <wctype.h>
+#endif
 
 /* NOTE: it's strange to be including an architecture specific header
    in what's supposed to be general (to PE/PEI) code.  However, that's
@@ -3571,17 +3574,31 @@
     res = 0;
     for (i = min (alen, blen); i--; astring += 2, bstring += 2)
       {
+#if defined HAVE_WCTYPE_H
+	wint_t awc;
+	wint_t bwc;
+#else
 	wchar_t awc;
 	wchar_t bwc;
+#endif
 
 	/* Convert UTF-16 unicode characters into wchar_t characters so
 	   that we can then perform a case insensitive comparison.  */
 	int Alen = u16_mbtouc (& awc, (const unsigned short *) astring, 2);
 	int Blen = u16_mbtouc (& bwc, (const unsigned short *) bstring, 2);
 
+#if defined HAVE_WCTYPE_H
+	awc = towlower(awc);
+	bwc = towlower(bwc);
+#endif
+
 	if (Alen != Blen)
 	  return Alen - Blen;
+#if defined HAVE_WCTYPE_H
+	res = wcsncmp (& awc, & bwc, 1);
+#else
 	res = wcsncasecmp (& awc, & bwc, 1);
+#endif
 	if (res)
 	  break;
       }
