Work around wrong vsscanf() declaration under HP-UX.
Under this system vsscanf() is declared as taking a non-const char* as first argument which prevented our code using it from compiling. Wrap it in wxCRT_VsscanfA() adding the necessary const_cast<> to fix this. Closes #15638. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_3_0_BRANCH@75339 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
48
configure
vendored
48
configure
vendored
@@ -29995,6 +29995,54 @@ $as_echo "$wx_cv_func_vsscanf_decl" >&6; }
|
|||||||
if test "$wx_cv_func_vsscanf_decl" = "yes"; then
|
if test "$wx_cv_func_vsscanf_decl" = "yes"; then
|
||||||
$as_echo "#define HAVE_VSSCANF_DECL 1" >>confdefs.h
|
$as_echo "#define HAVE_VSSCANF_DECL 1" >>confdefs.h
|
||||||
|
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if vsscanf() declaration is broken" >&5
|
||||||
|
$as_echo_n "checking if vsscanf() declaration is broken... " >&6; }
|
||||||
|
if ${wx_cv_func_broken_vsscanf_decl+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#ifdef __MSL__
|
||||||
|
#if __MSL__ >= 0x6000
|
||||||
|
namespace std {}
|
||||||
|
using namespace std;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
const char *buf;
|
||||||
|
va_list args;
|
||||||
|
vsscanf(buf, "%s", args);
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_cxx_try_compile "$LINENO"; then :
|
||||||
|
wx_cv_func_broken_vsscanf_decl=no
|
||||||
|
else
|
||||||
|
wx_cv_func_broken_vsscanf_decl=yes
|
||||||
|
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $wx_cv_func_broken_vsscanf_decl" >&5
|
||||||
|
$as_echo "$wx_cv_func_broken_vsscanf_decl" >&6; }
|
||||||
|
|
||||||
|
if test "$wx_cv_func_broken_vsscanf_decl" = "yes"; then
|
||||||
|
$as_echo "#define HAVE_BROKEN_VSSCANF_DECL 1" >>confdefs.h
|
||||||
|
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
ac_ext=c
|
ac_ext=c
|
||||||
|
31
configure.in
31
configure.in
@@ -4236,6 +4236,37 @@ if test "$ac_cv_func_vsscanf" = "yes"; then
|
|||||||
|
|
||||||
if test "$wx_cv_func_vsscanf_decl" = "yes"; then
|
if test "$wx_cv_func_vsscanf_decl" = "yes"; then
|
||||||
AC_DEFINE(HAVE_VSSCANF_DECL)
|
AC_DEFINE(HAVE_VSSCANF_DECL)
|
||||||
|
|
||||||
|
dnl we know there is a vsscanf() declaration, but it can be broken by
|
||||||
|
dnl declaring vsscanf() as taking a non-const first argument (this
|
||||||
|
dnl happens at least under HP-UX 11.31, see #15638).
|
||||||
|
AC_CACHE_CHECK([if vsscanf() declaration is broken], wx_cv_func_broken_vsscanf_decl,
|
||||||
|
[
|
||||||
|
AC_TRY_COMPILE(
|
||||||
|
[
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#ifdef __MSL__
|
||||||
|
#if __MSL__ >= 0x6000
|
||||||
|
namespace std {}
|
||||||
|
using namespace std;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
],
|
||||||
|
[
|
||||||
|
const char *buf;
|
||||||
|
va_list args;
|
||||||
|
vsscanf(buf, "%s", args);
|
||||||
|
],
|
||||||
|
wx_cv_func_broken_vsscanf_decl=no,
|
||||||
|
wx_cv_func_broken_vsscanf_decl=yes
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
if test "$wx_cv_func_broken_vsscanf_decl" = "yes"; then
|
||||||
|
AC_DEFINE(HAVE_BROKEN_VSSCANF_DECL)
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
AC_LANG_POP()
|
AC_LANG_POP()
|
||||||
|
@@ -578,6 +578,7 @@ All:
|
|||||||
|
|
||||||
- Fix wxSocket::WaitForAccept() in non-main thread (Hajo Kirchhoff).
|
- Fix wxSocket::WaitForAccept() in non-main thread (Hajo Kirchhoff).
|
||||||
- Fix memory overallocation in wxVector::reserve() (Nigel Paton).
|
- Fix memory overallocation in wxVector::reserve() (Nigel Paton).
|
||||||
|
- Fix the build under HP-UX (tested under 11.31).
|
||||||
|
|
||||||
All (GUI):
|
All (GUI):
|
||||||
|
|
||||||
|
@@ -238,7 +238,17 @@
|
|||||||
#define wxCRT_ScanfA scanf
|
#define wxCRT_ScanfA scanf
|
||||||
#define wxCRT_SscanfA sscanf
|
#define wxCRT_SscanfA sscanf
|
||||||
#define wxCRT_FscanfA fscanf
|
#define wxCRT_FscanfA fscanf
|
||||||
#define wxCRT_VsscanfA vsscanf
|
|
||||||
|
/* vsscanf() may have a wrong declaration with non-const first parameter, fix
|
||||||
|
* this by wrapping it if necessary. */
|
||||||
|
#if defined __cplusplus && defined HAVE_BROKEN_VSSCANF_DECL
|
||||||
|
inline int wxCRT_VsscanfA(const char *str, const char *format, va_list ap)
|
||||||
|
{
|
||||||
|
return vsscanf(const_cast<char *>(str), format, ap);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define wxCRT_VsscanfA vsscanf
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(wxNEED_WPRINTF)
|
#if defined(wxNEED_WPRINTF)
|
||||||
int wxCRT_ScanfW(const wchar_t *format, ...);
|
int wxCRT_ScanfW(const wchar_t *format, ...);
|
||||||
|
@@ -1001,6 +1001,10 @@
|
|||||||
* with 'char*' for the 3rd parameter instead of 'const char*' */
|
* with 'char*' for the 3rd parameter instead of 'const char*' */
|
||||||
#undef HAVE_BROKEN_VSNPRINTF_DECL
|
#undef HAVE_BROKEN_VSNPRINTF_DECL
|
||||||
|
|
||||||
|
/* Define if you have a _broken_ vsscanf() declaration in the header,
|
||||||
|
* with 'char*' for the 1st parameter instead of 'const char*' */
|
||||||
|
#undef HAVE_BROKEN_VSSCANF_DECL
|
||||||
|
|
||||||
/* Define if you have vsscanf() */
|
/* Define if you have vsscanf() */
|
||||||
#undef HAVE_VSSCANF
|
#undef HAVE_VSSCANF
|
||||||
|
|
||||||
|
@@ -1107,6 +1107,10 @@ typedef pid_t GPid;
|
|||||||
* with 'char*' for the 3rd parameter instead of 'const char*' */
|
* with 'char*' for the 3rd parameter instead of 'const char*' */
|
||||||
#undef HAVE_BROKEN_VSNPRINTF_DECL
|
#undef HAVE_BROKEN_VSNPRINTF_DECL
|
||||||
|
|
||||||
|
/* Define if you have a _broken_ vsscanf() declaration in the header,
|
||||||
|
* with 'char*' for the 1st parameter instead of 'const char*' */
|
||||||
|
#undef HAVE_BROKEN_VSSCANF_DECL
|
||||||
|
|
||||||
/* Define if you have vsscanf() */
|
/* Define if you have vsscanf() */
|
||||||
#define HAVE_VSSCANF 1
|
#define HAVE_VSSCANF 1
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user