[RFC] BFD MinGW/Cygwin build error in bfd/peiXXgen.c

asmwarrior asmwarrior@gmail.com
Wed Dec 18 13:25:00 GMT 2013


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  <muller@sourceware.org>
>
> 	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



More information about the Binutils mailing list