From 944ee1d0af5429447d1c2fa388e2cdeda84dab90 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Wed, 31 Mar 2021 02:03:16 +0100 Subject: [PATCH] Use statvfs(2) if available instead of statfs(2). --- setter/src/unix/CMakeLists.txt | 9 +++++++++ setter/src/unix/volume.c | 27 ++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/setter/src/unix/CMakeLists.txt b/setter/src/unix/CMakeLists.txt index 1b6c70a..6868c2c 100644 --- a/setter/src/unix/CMakeLists.txt +++ b/setter/src/unix/CMakeLists.txt @@ -31,6 +31,15 @@ include(CheckStructHasMember) CHECK_SYMBOL_EXISTS(statfs "sys/statfs.h" HAVE_SYS_STATFS) CHECK_SYMBOL_EXISTS(statfs "sys/mount.h" HAVE_SYS_MOUNT) +CHECK_SYMBOL_EXISTS(statvfs "sys/statvfs.h" HAVE_SYS_STATVFS) + +# NetBSD >= 3.0 +if(HAVE_SYS_STATVFS) + message("-- Found statvfs in sys/statvfs.h") + add_definitions(-DHAVE_SYS_STATVFS_H) + CHECK_STRUCT_HAS_MEMBER("struct statvfs" "f_namemax" "sys/statvfs.h" HAVE_STATFS_NAMEMAX) + CHECK_STRUCT_HAS_MEMBER("struct statvfs" "f_fstypename" "sys/statvfs.h" HAVE_STATFS_FTYPENAME) +endif() # Linux and FreeBSD if(HAVE_SYS_STATFS) diff --git a/setter/src/unix/volume.c b/setter/src/unix/volume.c index cecc06a..a058d8c 100644 --- a/setter/src/unix/volume.c +++ b/setter/src/unix/volume.c @@ -30,6 +30,10 @@ Copyright (C) 2011-2021 Natalia Portillo #include #endif +#ifdef HAVE_SYS_STATVFS_H +#include +#endif + #if defined(HAVE_SYS_MOUNT_H) #include #include @@ -43,14 +47,24 @@ Copyright (C) 2011-2021 Natalia Portillo #include "../linux/linux.h" #elif defined(__APPLE__) && defined(__MACH__) #include "../darwin/darwin.h" +#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__) +#include "../bsd/bsd.h" #endif void GetVolumeInfo(const char* path, size_t* clusterSize) { +#ifdef HAVE_SYS_STATVFS_H + struct statvfs buf; +#else struct statfs buf; - int ret; +#endif + int ret; +#ifdef HAVE_SYS_STATVFS_H + ret = statvfs(path, &buf); +#else ret = statfs(path, &buf); +#endif if(ret) { @@ -163,6 +177,16 @@ void GetVolumeInfo(const char* path, size_t* clusterSize) log_write("\tMaximum component length: %ld\n", buf.f_namemax); #endif +#if HAVE_SYS_STATVFS_H + if(buf.f_flag) + { +#if defined(__NetBSD__) +// TODO: NetBsdPrintStatfsFlags(buf.f_flag); +#else + log_write("\tFlags: 0x%08lX\n", buf.f_flag); +#endif + } +#else if(buf.f_flags) { #if defined(__linux__) || defined(__LINUX__) || defined(__gnu_linux) @@ -173,6 +197,7 @@ void GetVolumeInfo(const char* path, size_t* clusterSize) log_write("\tFlags: 0x%08lX\n", buf.f_flags); #endif } +#endif *clusterSize = buf.f_bsize;