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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.