mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-23 22:16:16 +01:00
Avoid failing arguments to statfs() test on systems which use statvfs.
- move choice of statfs vs statvfs from gio/glocalfile.c to configure.ac - if statvfs is the choice, then don't check number of arguments to statfs() - use choice in gio/gunixmounts.c as well https://bugzilla.gnome.org/show_bug.cgi?id=617949
This commit is contained in:
parent
75b30dc51c
commit
7f289c924b
30
configure.ac
30
configure.ac
@ -1000,11 +1000,39 @@ AC_MSG_RESULT(unsigned $glib_size_type)
|
||||
|
||||
# Check for some functions
|
||||
AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf stpcpy strcasecmp strncasecmp poll getcwd vasprintf setenv unsetenv getc_unlocked readlink symlink fdwalk memmem)
|
||||
AC_CHECK_FUNCS(chown lchmod lchown fchmod fchown link statvfs statfs utimes getgrgid getpwuid)
|
||||
AC_CHECK_FUNCS(chown lchmod lchown fchmod fchown link utimes getgrgid getpwuid)
|
||||
AC_CHECK_FUNCS(getmntent_r setmntent endmntent hasmntopt getmntinfo)
|
||||
# Check for high-resolution sleep functions
|
||||
AC_CHECK_FUNCS(splice)
|
||||
|
||||
# To avoid finding a compatibility unusable statfs, which typically
|
||||
# successfully compiles, but warns to use the newer statvfs interface:
|
||||
AS_IF([test $ac_cv_header_sys_statvfs_h = yes], [AC_CHECK_FUNCS([statvfs])])
|
||||
AS_IF([test $ac_cv_header_sys_statfs_h = yes], [AC_CHECK_FUNCS([statfs])])
|
||||
|
||||
AC_MSG_CHECKING([whether to use statfs or statvfs])
|
||||
# Some systems have both statfs and statvfs, pick the most "native" for these
|
||||
AS_IF([test x$ac_cv_func_statfs = xyes && test x$ac_cv_func_statvfs = yes],
|
||||
[
|
||||
# on solaris and irix, statfs doesn't even have the f_bavail field
|
||||
AS_IF([test $ac_cv_member_struct_statfs_f_bavail = yes],
|
||||
[ac_cv_func_statfs=no],
|
||||
# else, at least on linux, statfs is the actual syscall
|
||||
[ac_cv_func_statvfs=no])
|
||||
])
|
||||
|
||||
AS_IF([test x$ac_cv_func_statfs = xyes],
|
||||
[
|
||||
AC_DEFINE([USE_STATFS], [1], [Define to use statfs()])
|
||||
AC_MSG_RESULT([statfs])
|
||||
],
|
||||
[test x$ac_cv_func_statvfs = xyes],
|
||||
[
|
||||
AC_DEFINE([USE_STATVFS], [1], [Define to use statvfs()])
|
||||
AC_MSG_RESULT([statvfs])
|
||||
],
|
||||
[ AC_MSG_RESULT([neither])])
|
||||
|
||||
AC_CHECK_HEADERS(crt_externs.h)
|
||||
AC_CHECK_FUNCS(_NSGetEnviron)
|
||||
|
||||
|
@ -50,28 +50,6 @@
|
||||
#define O_BINARY 0
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_STATFS) && defined(HAVE_STATVFS)
|
||||
/* Some systems have both statfs and statvfs, pick the
|
||||
most "native" for these */
|
||||
# if !defined(HAVE_STRUCT_STATFS_F_BAVAIL)
|
||||
/* on solaris and irix, statfs doesn't even have the
|
||||
f_bavail field */
|
||||
# define USE_STATVFS
|
||||
# else
|
||||
/* at least on linux, statfs is the actual syscall */
|
||||
# define USE_STATFS
|
||||
# endif
|
||||
|
||||
#elif defined(HAVE_STATFS)
|
||||
|
||||
# define USE_STATFS
|
||||
|
||||
#elif defined(HAVE_STATVFS)
|
||||
|
||||
# define USE_STATVFS
|
||||
|
||||
#endif
|
||||
|
||||
#include "gfileattribute.h"
|
||||
#include "glocalfile.h"
|
||||
#include "glocalfileinfo.h"
|
||||
|
@ -38,9 +38,6 @@
|
||||
#ifdef HAVE_POLL_H
|
||||
#include <poll.h>
|
||||
#endif
|
||||
#if HAVE_SYS_STATVFS_H
|
||||
#include <sys/statvfs.h>
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/time.h>
|
||||
@ -50,6 +47,25 @@
|
||||
#include <gstdio.h>
|
||||
#include <dirent.h>
|
||||
|
||||
#if HAVE_SYS_STATFS_H
|
||||
#include <sys/statfs.h>
|
||||
#endif
|
||||
#if HAVE_SYS_STATVFS_H
|
||||
#include <sys/statvfs.h>
|
||||
#endif
|
||||
#if HAVE_SYS_VFS_H
|
||||
#include <sys/vfs.h>
|
||||
#elif HAVE_SYS_MOUNT_H
|
||||
#if HAVE_SYS_PARAM_H
|
||||
#include <sys/param.h>
|
||||
#endif
|
||||
#include <sys/mount.h>
|
||||
#endif
|
||||
|
||||
#ifndef O_BINARY
|
||||
#define O_BINARY 0
|
||||
#endif
|
||||
|
||||
#include "gunixmounts.h"
|
||||
#include "gfile.h"
|
||||
#include "gfilemonitor.h"
|
||||
@ -570,7 +586,13 @@ get_mtab_monitor_file (void)
|
||||
static GList *
|
||||
_g_get_unix_mounts (void)
|
||||
{
|
||||
#if defined(USE_STATFS)
|
||||
struct statfs *mntent = NULL;
|
||||
#elif defined(USE_STATVFS)
|
||||
struct statvfs *mntent = NULL;
|
||||
#else
|
||||
#error statfs juggling failed
|
||||
#endif
|
||||
int num_mounts, i;
|
||||
GUnixMountEntry *mount_entry;
|
||||
GList *return_list;
|
||||
@ -588,7 +610,11 @@ _g_get_unix_mounts (void)
|
||||
mount_entry->mount_path = g_strdup (mntent[i].f_mntonname);
|
||||
mount_entry->device_path = g_strdup (mntent[i].f_mntfromname);
|
||||
mount_entry->filesystem_type = g_strdup (mntent[i].f_fstypename);
|
||||
#if defined(USE_STATFS)
|
||||
if (mntent[i].f_flags & MNT_RDONLY)
|
||||
#elif defined(USE_STATVFS)
|
||||
if (mntent[i].f_flag & MNT_RDONLY)
|
||||
#endif
|
||||
mount_entry->is_read_only = TRUE;
|
||||
|
||||
mount_entry->is_system_internal =
|
||||
|
Loading…
Reference in New Issue
Block a user