backported configure test for WX_STATVFS_T.
(Adding some braces as newer autoconf version love them, IIRC). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@19081 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
68
configure.in
68
configure.in
@@ -3286,9 +3286,55 @@ AC_CACHE_CHECK(for statfs, wx_cv_func_statfs,
|
|||||||
)
|
)
|
||||||
|
|
||||||
if test "$wx_cv_func_statfs" = "yes"; then
|
if test "$wx_cv_func_statfs" = "yes"; then
|
||||||
|
wx_cv_type_statvfs_t="struct statfs"
|
||||||
AC_DEFINE(HAVE_STATFS)
|
AC_DEFINE(HAVE_STATFS)
|
||||||
else
|
else
|
||||||
AC_CACHE_CHECK(for statvfs, wx_cv_func_statvfs,
|
AC_CACHE_CHECK(for statvfs, wx_cv_func_statvfs,
|
||||||
|
AC_TRY_COMPILE(
|
||||||
|
[
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <sys/statvfs.h>
|
||||||
|
],
|
||||||
|
[
|
||||||
|
statvfs("/", NULL);
|
||||||
|
],
|
||||||
|
[
|
||||||
|
wx_cv_func_statvfs=yes
|
||||||
|
],
|
||||||
|
[
|
||||||
|
wx_cv_func_statvfs=no
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if test "$wx_cv_func_statvfs" = "yes"; then
|
||||||
|
dnl we also have to check whether we should use statvfs_t (works under
|
||||||
|
dnl Solaris 8, doesn't work under Solaris 7) or "struct statvfs" (vice
|
||||||
|
dnl versa) as the argument for statvfs in 64 bit off_t mode (in 32 bit
|
||||||
|
dnl mode both work fine)
|
||||||
|
dnl
|
||||||
|
dnl for this check C++ compiler has to be used as passing incompatible
|
||||||
|
dnl pointers is just a warning and not an error in C
|
||||||
|
AC_LANG_SAVE
|
||||||
|
AC_LANG_CPLUSPLUS
|
||||||
|
|
||||||
|
AC_CACHE_CHECK(for statvfs argument type, wx_cv_type_statvfs_t,
|
||||||
|
AC_TRY_COMPILE(
|
||||||
|
[
|
||||||
|
#include <sys/statvfs.h>
|
||||||
|
],
|
||||||
|
[
|
||||||
|
long l;
|
||||||
|
statvfs_t fs;
|
||||||
|
statvfs("/", &fs);
|
||||||
|
l = fs.f_bsize;
|
||||||
|
l += fs.f_blocks;
|
||||||
|
l += fs.f_bavail;
|
||||||
|
],
|
||||||
|
[
|
||||||
|
wx_cv_type_statvfs_t=statvfs_t
|
||||||
|
],
|
||||||
|
[
|
||||||
AC_TRY_COMPILE(
|
AC_TRY_COMPILE(
|
||||||
[
|
[
|
||||||
#include <sys/statvfs.h>
|
#include <sys/statvfs.h>
|
||||||
@@ -3302,19 +3348,31 @@ else
|
|||||||
l += fs.f_bavail;
|
l += fs.f_bavail;
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
wx_cv_func_statvfs=yes
|
wx_cv_type_statvfs_t="struct statvfs"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
wx_cv_func_statvfs=no
|
wx_cv_type_statvfs_t="unknown"
|
||||||
|
]
|
||||||
|
)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if test "$wx_cv_func_statvfs" = "yes"; then
|
AC_LANG_RESTORE
|
||||||
|
|
||||||
|
if test "$wx_cv_type_statvfs_t" != "unknown"; then
|
||||||
AC_DEFINE(HAVE_STATVFS)
|
AC_DEFINE(HAVE_STATVFS)
|
||||||
else
|
|
||||||
AC_MSG_WARN([wxGetDiskSpace() function won't work without statfs()])
|
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
dnl set it for the test below
|
||||||
|
wx_cv_type_statvfs_t="unknown"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$wx_cv_type_statvfs_t" != "unknown"; then
|
||||||
|
AC_DEFINE_UNQUOTED(WX_STATFS_T, $wx_cv_type_statvfs_t)
|
||||||
|
else
|
||||||
|
AC_MSG_WARN([wxGetDiskSpace() function won't work without statfs()])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl check for fcntl() or at least flock() needed by Unix implementation of
|
dnl check for fcntl() or at least flock() needed by Unix implementation of
|
||||||
|
@@ -881,6 +881,9 @@
|
|||||||
/* The type of 3rd argument to getsockname() - usually size_t or int */
|
/* The type of 3rd argument to getsockname() - usually size_t or int */
|
||||||
#undef SOCKLEN_T
|
#undef SOCKLEN_T
|
||||||
|
|
||||||
|
/* The type of statvfs(2) argument */
|
||||||
|
#undef WX_STATFS_T
|
||||||
|
|
||||||
/* The signal handler prototype */
|
/* The signal handler prototype */
|
||||||
#undef wxTYPE_SA_HANDLER
|
#undef wxTYPE_SA_HANDLER
|
||||||
|
|
||||||
|
@@ -28,30 +28,32 @@
|
|||||||
|
|
||||||
#include "wx/wfstream.h"
|
#include "wx/wfstream.h"
|
||||||
|
|
||||||
|
// not only the statfs syscall is called differently depending on platform, but
|
||||||
|
// one of its incarnations, statvfs(), takes different arguments under
|
||||||
|
// different platforms and even different versions of the same system (Solaris
|
||||||
|
// 7 and 8): if you want to test for this, don't forget that the problems only
|
||||||
|
// appear if the large files support is enabled
|
||||||
#ifdef HAVE_STATFS
|
#ifdef HAVE_STATFS
|
||||||
# ifdef __BSD__
|
#ifdef __BSD__
|
||||||
# include <sys/param.h>
|
#include <sys/param.h>
|
||||||
# include <sys/mount.h>
|
#include <sys/mount.h>
|
||||||
# else
|
#else // !__BSD__
|
||||||
# include <sys/vfs.h>
|
#include <sys/vfs.h>
|
||||||
# endif
|
#endif // __BSD__/!__BSD__
|
||||||
|
|
||||||
|
#define wxStatfs statfs
|
||||||
#endif // HAVE_STATFS
|
#endif // HAVE_STATFS
|
||||||
|
|
||||||
// not only the statfs syscall is called differently depending on platform, but
|
|
||||||
// we also can't use "struct statvfs" under Solaris because it breaks down if
|
|
||||||
// HAVE_LARGEFILE_SUPPORT == 1 and we must use statvfs_t instead
|
|
||||||
#ifdef HAVE_STATVFS
|
#ifdef HAVE_STATVFS
|
||||||
#include <sys/statvfs.h>
|
#include <sys/statvfs.h>
|
||||||
|
|
||||||
#define statfs statvfs
|
#define wxStatfs statvfs
|
||||||
# ifdef __HPUX__
|
#endif // HAVE_STATVFS
|
||||||
#define wxStatFs struct statvfs
|
|
||||||
# else
|
#if defined(HAVE_STATFS) || defined(HAVE_STATVFS)
|
||||||
#define wxStatFs statvfs_t
|
// WX_STATFS_T is detected by configure
|
||||||
# endif
|
#define wxStatfs_t WX_STATFS_T
|
||||||
#elif HAVE_STATFS
|
#endif
|
||||||
#define wxStatFs struct statfs
|
|
||||||
#endif // HAVE_STAT[V]FS
|
|
||||||
|
|
||||||
#if wxUSE_GUI
|
#if wxUSE_GUI
|
||||||
#include "wx/unix/execute.h"
|
#include "wx/unix/execute.h"
|
||||||
@@ -1024,8 +1026,8 @@ bool wxGetDiskSpace(const wxString& path, wxLongLong *pTotal, wxLongLong *pFree)
|
|||||||
{
|
{
|
||||||
#if defined(HAVE_STATFS) || defined(HAVE_STATVFS)
|
#if defined(HAVE_STATFS) || defined(HAVE_STATVFS)
|
||||||
// the case to "char *" is needed for AIX 4.3
|
// the case to "char *" is needed for AIX 4.3
|
||||||
wxStatFs fs;
|
wxStatfs_t fs;
|
||||||
if ( statfs((char *)(const char*)path.fn_str(), &fs) != 0 )
|
if ( wxStatfs((char *)(const char*)path.fn_str(), &fs) != 0 )
|
||||||
{
|
{
|
||||||
wxLogSysError( wxT("Failed to get file system statistics") );
|
wxLogSysError( wxT("Failed to get file system statistics") );
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user