Re: [RFC] BFD MinGW/Cygwin build error in bfd/peiXXgen.c
asmwarrior <[email protected]>
| Newsgroups | gmane.comp.gnu.binutils,gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
On 2013-12-18 21:02, Pierre Muller wrote: > Cygwin also fails to compile bfd/peigen.c, itself gebnerated > from source bfd/peXXigen.c. > > The patch below allows to compile both for mingw32 and cygwin hosts. > To fix the unknown wcsncasecmp function for mingw32 hosts, > I added this code: > > +#ifdef __MINGW32__ > +#define wcsncasecmp wcsnicmp > +#endif > I think that using the Windows API function wcsnicmp > here is OK, but I don't know if the code should be somehow modified to > accept wcsncasecmp function if it is added later to mingw hosts... > > Pierre Muller > > > bfd/ChangeLog entry: > > 2013-12-18 Pierre Muller <[email protected]> > > peXXigen.c (u16_mbtouc): Avoid unused function warning by exculding if > __CYGWIN__ or __MINGW32__ macro is defined. > (rsrc_cmp): Fix short Windows OS version. Also use this code > for mingw32 systems. > [__MINGW32__]: Alias wcsncasecmp function to Windows API wcsnicmp function. > > diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c > index 5e2a876..05c7d8b 100644 > --- a/bfd/peXXigen.c > +++ b/bfd/peXXigen.c > @@ -2930,7 +2930,7 @@ rsrc_write_directory (rsrc_write_data * data, > BFD_ASSERT (nt == next_entry); > } > > -#ifdef HAVE_WCHAR_H > +#if defined HAVE_WCHAR_H && ! defined __CYGWIN__ && ! defined __MINGW32__ > /* Return the length (number of units) of the first character in S, > putting its 'ucs4_t' representation in *PUC. */ > > @@ -2979,9 +2979,16 @@ rsrc_cmp (bfd_boolean is_name, rsrc_entry * a, rsrc_entry * b) > /* We have to perform a case insenstive, unicode string comparison... */ > int res; > > -#ifdef __CYGWIN__ > +#if defined __CYGWIN__ || defined __MINGW32__ > +#ifdef __MINGW32__ > +#define wcsncasecmp wcsnicmp > +#endif > /* Under Cygwin unicode == UTF-16 == wchar_t. > FIXME: The same is true for MingGW - we should test for that too. */ > + bfd_byte * astring = a->name_id.name.string; > + unsigned int alen = a->name_id.name.len; > + bfd_byte * bstring = b->name_id.name.string; > + unsigned int blen = b->name_id.name.len; > res = wcsncasecmp ((const wchar_t *) astring + 2, (const wchar_t *) bstring + 2, min (alen, blen)); > #elif defined HAVE_WCHAR_H > unsigned int i; Thanks, just test this patch, it fix the build error under MinGW-Build 4.8.2 + MSYS. Yuanhui Zhang