From 62a73f7d2d352c90014ae6b142fecceb173f4443 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sun, 20 Jun 2010 19:56:44 +0300 Subject: [PATCH] Use fstatvfs where usable (BSD) - fixes #3762 --- configure.ac | 4 ++-- modules/access/file.c | 37 +++++++++++++++++++------------------ 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/configure.ac b/configure.ac index 87b6fc0c8d..0887370ad8 100644 --- a/configure.ac +++ b/configure.ac @@ -549,14 +549,14 @@ dnl Check for system libs needed need_libc=false dnl Check for usual libc functions -AC_CHECK_FUNCS([ctime_r daemon fcntl fdopendir fork getenv getpwuid_r gettimeofday isatty lstat memalign openat posix_fadvise posix_madvise posix_memalign setenv setlocale stricmp strnicmp tdestroy uselocale]) +AC_CHECK_FUNCS([ctime_r daemon fcntl fdopendir fstatvfs fork getenv getpwuid_r gettimeofday isatty lstat memalign openat posix_fadvise posix_madvise posix_memalign setenv setlocale stricmp strnicmp tdestroy uselocale]) AC_REPLACE_FUNCS([asprintf atof atoll getcwd getdelim getpid gmtime_r lldiv localtime_r nrand48 rewind strcasecmp strcasestr strdup strlcpy strncasecmp strndup strnlen strsep strtof strtok_r strtoll swab vasprintf]) AC_CHECK_FUNCS(fdatasync,, [AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to fsync() if missing.]) ]) dnl Check for non-standard system calls -AC_CHECK_FUNCS([accept4 dup3 eventfd fstatfs vmsplice sched_getaffinity]) +AC_CHECK_FUNCS([accept4 dup3 eventfd vmsplice sched_getaffinity]) AH_BOTTOM([#include ]) diff --git a/modules/access/file.c b/modules/access/file.c index be6b2a0117..245fb9fe20 100644 --- a/modules/access/file.c +++ b/modules/access/file.c @@ -39,21 +39,20 @@ #ifdef HAVE_SYS_STAT_H # include #endif -#if defined(HAVE_FSTATFS) && defined(__SunOS) -# undef HAVE_FSTATFS -#endif #ifdef HAVE_FCNTL_H # include #endif -#if defined (__linux__) -# include +#ifdef HAVE_FSTATVFS +# include +# if defined (HAVE_SYS_MOUNT_H) +# include +# include +# endif +#endif #ifdef HAVE_LINUX_MAGIC_H +# include # include #endif -#elif defined (HAVE_SYS_MOUNT_H) -# include -# include -#endif #if defined( WIN32 ) # include @@ -91,17 +90,20 @@ struct access_sys_t #ifndef WIN32 static bool IsRemote (int fd) { -#ifdef HAVE_FSTATFS +#if defined (HAVE_FSTATVFS) && defined (MNT_LOCAL) + struct statvfs stf; + + if (fstatvfs (fd, &stf)) + return false; + /* fstatvfs() is in POSIX, but MNT_LOCAL is not */ + return !(s.f_flag & MNT_LOCAL); + +#elif defined (HAVE_LINUX_MAGIC_H) struct statfs stf; if (fstatfs (fd, &stf)) return false; -#if defined(MNT_LOCAL) - return !(stf.f_flags & MNT_LOCAL); - -#else -# ifdef HAVE_LINUX_MAGIC_H switch (stf.f_type) { case AFS_SUPER_MAGIC: @@ -113,9 +115,8 @@ static bool IsRemote (int fd) return true; } return false; -# endif -#endif -#else /* !HAVE_FSTATFS */ + +#else (void)fd; return false; -- 2.39.2