PR29915, bfdio.c does not compile with mingw.org's MinGW

PR 29915
	* configure.ac: Add AC_CHECK_DECLS test ___lc_codepage_func.
	* configure: Regenerate.
	* config.in: Regenerate.
	* bfdio.c (___lc_codepage_func): Move declaration to..
	(_bfd_real_fopen): ..here, and use !HAVE_DECL____LC_CODEPAGE_FUNC.
This commit is contained in:
Alan Modra
2022-12-20 18:01:07 +10:30
parent b3737aadf1
commit 9d09914492
4 changed files with 22 additions and 6 deletions

View File

@@ -31,11 +31,6 @@
#include <locale.h> #include <locale.h>
#endif #endif
#if defined(__MINGW64_VERSION_MAJOR) && __MINGW64_VERSION_MAJOR < 9
/* This prototype was added to locale.h in version 9.0 of MinGW-w64. */
_CRTIMP unsigned int __cdecl ___lc_codepage_func(void);
#endif
#ifndef S_IXUSR #ifndef S_IXUSR
#define S_IXUSR 0100 /* Execute by owner. */ #define S_IXUSR 0100 /* Execute by owner. */
#endif #endif
@@ -127,7 +122,11 @@ _bfd_real_fopen (const char *filename, const char *modes)
const wchar_t prefix[] = L"\\\\?\\"; const wchar_t prefix[] = L"\\\\?\\";
const size_t partPathLen = strlen (filename) + 1; const size_t partPathLen = strlen (filename) + 1;
#ifdef __MINGW32__ #ifdef __MINGW32__
const unsigned int cp = ___lc_codepage_func(); #if !HAVE_DECL____LC_CODEPAGE_FUNC
/* This prototype was added to locale.h in version 9.0 of MinGW-w64. */
_CRTIMP unsigned int __cdecl ___lc_codepage_func (void);
#endif
const unsigned int cp = ___lc_codepage_func ();
#else #else
const unsigned int cp = CP_UTF8; const unsigned int cp = CP_UTF8;
#endif #endif

View File

@@ -64,6 +64,10 @@
don't. */ don't. */
#undef HAVE_DECL_VASPRINTF #undef HAVE_DECL_VASPRINTF
/* Define to 1 if you have the declaration of `___lc_codepage_func', and to 0
if you don't. */
#undef HAVE_DECL____LC_CODEPAGE_FUNC
/* Define to 1 if you have the <dlfcn.h> header file. */ /* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H #undef HAVE_DLFCN_H

12
bfd/configure vendored
View File

@@ -13006,6 +13006,18 @@ cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_STRNLEN $ac_have_decl #define HAVE_DECL_STRNLEN $ac_have_decl
_ACEOF _ACEOF
ac_fn_c_check_decl "$LINENO" "___lc_codepage_func" "ac_cv_have_decl____lc_codepage_func" "#include <locale.h>
"
if test "x$ac_cv_have_decl____lc_codepage_func" = xyes; then :
ac_have_decl=1
else
ac_have_decl=0
fi
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL____LC_CODEPAGE_FUNC $ac_have_decl
_ACEOF
case "${host}" in case "${host}" in

View File

@@ -227,6 +227,7 @@ AC_CHECK_FUNCS(fcntl fdopen fileno fls getgid getpagesize getrlimit getuid \
sysconf) sysconf)
AC_CHECK_DECLS([basename, ffs, stpcpy, asprintf, vasprintf, strnlen]) AC_CHECK_DECLS([basename, ffs, stpcpy, asprintf, vasprintf, strnlen])
AC_CHECK_DECLS([___lc_codepage_func], [], [], [[#include <locale.h>]])
BFD_BINARY_FOPEN BFD_BINARY_FOPEN