aboutsummaryrefslogtreecommitdiff
path: root/bfd/peXXigen.c
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2015-02-24 17:01:23 +0000
committerNick Clifton <nickc@redhat.com>2015-02-24 17:01:23 +0000
commit31593e1b96c792abba3c5268d6423975aefa56b2 (patch)
treece993349f35e1985a69ced3df18b8a57eabfb814 /bfd/peXXigen.c
parent94d15024fe3dff908ab570aaa741b1c834c856d6 (diff)
downloadfsf-binutils-gdb-31593e1b96c792abba3c5268d6423975aefa56b2.zip
fsf-binutils-gdb-31593e1b96c792abba3c5268d6423975aefa56b2.tar.gz
fsf-binutils-gdb-31593e1b96c792abba3c5268d6423975aefa56b2.tar.bz2
Fixes compiling peXXigen under MAC OS/X where the wcsncasecmp function is not available.
* configure.ac (AC_CHECK_HEADERS): Add wctype.h. * configure: Regenerate. * config.in: Regenerate. * peXXigen.c: Include wctype.h if HAVE_WCTYPE_H is defined. (u16_mbtowc): Use wint_t types if HAVE_WCTYPE_H is defined. (rsrc_cmp): Use towlower instead of wcsncasecmp if HAVE_WCTYPE_H is defined.
Diffstat (limited to 'bfd/peXXigen.c')
-rw-r--r--bfd/peXXigen.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c
index a7e9f04..c13c3ff 100644
--- a/bfd/peXXigen.c
+++ b/bfd/peXXigen.c
@@ -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
@@ -3537,7 +3540,11 @@ rsrc_write_directory (rsrc_write_data * data,
putting its 'ucs4_t' representation in *PUC. */
static unsigned int
+#if defined HAVE_WCTYPE_H
+u16_mbtouc (wint_t * puc, const unsigned short * s, unsigned int n)
+#else
u16_mbtouc (wchar_t * puc, const unsigned short * s, unsigned int n)
+#endif
{
unsigned short c = * s;
@@ -3609,20 +3616,34 @@ rsrc_cmp (bfd_boolean is_name, rsrc_entry * a, rsrc_entry * b)
#elif defined HAVE_WCHAR_H
{
unsigned int i;
+
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);
+ /* Convert UTF-16 unicode characters into wchar_t characters
+ so that we can then perform a case insensitive comparison. */
+ unsigned int Alen = u16_mbtouc (& awc, (const unsigned short *) astring, 2);
+ unsigned int Blen = u16_mbtouc (& bwc, (const unsigned short *) bstring, 2);
if (Alen != Blen)
return Alen - Blen;
+
+#ifdef HAVE_WCTYPE_H
+ awc = towlower (awc);
+ bwc = towlower (bwc);
+
+ res = awc - bwc;
+#else
res = wcsncasecmp (& awc, & bwc, 1);
+#endif
if (res)
break;
}