diff options
author | Nick Clifton <nickc@redhat.com> | 2015-02-24 17:01:23 +0000 |
---|---|---|
committer | Than McIntosh <thanm@google.com> | 2015-11-03 11:21:43 -0500 |
commit | 0a79d97a250d24bd88a53f8c68b0185f42a1be6a (patch) | |
tree | a16b0731b17ae2194ea9d07c132ff663769eba8a /binutils-2.25/bfd/peXXigen.c | |
parent | b51d5d619a9fcf799bf90c4b16bb74d6caf00ff1 (diff) | |
download | toolchain_binutils-0a79d97a250d24bd88a53f8c68b0185f42a1be6a.tar.gz toolchain_binutils-0a79d97a250d24bd88a53f8c68b0185f42a1be6a.tar.bz2 toolchain_binutils-0a79d97a250d24bd88a53f8c68b0185f42a1be6a.zip |
Fix Mac OS X build failures (wcsncasecmp unsat)
Cherry-pick of upstream commit 31593e1b96c792abba3c5268d6423975aefa56b2
2015-02-24 Nick Clifton <nickc@redhat.com>
* 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.
Bug: 25427405
Change-Id: I06e99d906226ce9c88ff1c568ae7a4d84df7f332
Diffstat (limited to 'binutils-2.25/bfd/peXXigen.c')
-rw-r--r-- | binutils-2.25/bfd/peXXigen.c | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/binutils-2.25/bfd/peXXigen.c b/binutils-2.25/bfd/peXXigen.c index 13e39e48..dae32f66 100644 --- a/binutils-2.25/bfd/peXXigen.c +++ b/binutils-2.25/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 @@ -3488,7 +3491,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; @@ -3560,20 +3567,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; } |