Browse Source

Change and simplify `statvfs` conditions in FileSystemStats

`getfsstat` v.s. `getvfsstat` condition is different than
`statfs` v.s. `statvfs`, so split each condition and simplify.

For `get(v)fsstat` side, changed to check and use `getmntinfo`, because
it is better than `get(v)fsstat` with fixed buffer size, and easier
than improve it with dynamic buffer allocation.

Signed-off-by: OBATA Akio <obache@wizdas.com>
pull/11/head
OBATA Akio 1 year ago
committed by TDE Gitea
parent
commit
d349995488
3 changed files with 34 additions and 12 deletions
  1. +14
    -0
      ConfigureChecks.cmake
  2. +6
    -0
      config.h.cmake
  3. +14
    -12
      ksim/monitors/filesystem/filesystemstats.cpp

+ 14
- 0
ConfigureChecks.cmake View File

@@ -155,6 +155,20 @@ if ( BUILD_KSIM )

check_include_file( "sys/loadavg.h" HAVE_SYS_LOADAVG_H )
check_function_exists( getloadavg HAVE_GETLOADAVG )
check_function_exists( statfs HAVE_STATFS )
check_function_exists( statvfs HAVE_STATVFS )
check_function_exists( getmntinfo HAVE_GETMNTINFO )
if( HAVE_GETMNTINFO )
check_cxx_source_compiles("
#include <sys/types.h>
#include <sys/statvfs.h>
int main(){
struct statvfs *mntbufp;
int flags;
return getmntinfo(&mntbufp, flags);
}"
GETMNTINFO_USES_STATVFS )
endif( HAVE_GETMNTINFO )

check_c_source_compiles(
"#include <linux/kernel.h>


+ 6
- 0
config.h.cmake View File

@@ -91,6 +91,12 @@
#cmakedefine HAVE_GETLOADAVG
#endif // HAVE_GETLOADAVG

#cmakedefine HAVE_STATFS
#if !defined( HAVE_STATVFS )
#cmakedefine HAVE_STATVFS
#endif
#cmakedefine HAVE_GETMNTINFO
#cmakedefine GETMNTINFO_USES_STATVFS

// superkaramba



+ 14
- 12
ksim/monitors/filesystem/filesystemstats.cpp View File

@@ -30,7 +30,7 @@
#include <sys/types.h>
#include <sys/param.h>

#if defined(HAVE_SYS_STATVFS_H) && !defined(__DragonFly__)
#if defined(HAVE_SYS_STATVFS_H)
#include <sys/statvfs.h>
#elif defined( HAVE_SYS_STATFS_H )
#include <sys/statfs.h>
@@ -59,12 +59,10 @@
#include <stdio.h>
#include <unistd.h>

#if defined(HAVE_STATVFS) && !defined(__DragonFly__)
#if defined(HAVE_STATVFS)
typedef struct statvfs ksim_statfs;
#define ksim_getfsstat getvfsstat
#elif defined( HAVE_STATFS ) || defined( Q_OS_FREEBSD )
#elif defined( HAVE_STATFS )
typedef struct statfs ksim_statfs;
#define ksim_getfsstat getfsstat
#else
typedef struct // fall back for (possibly) non-supported systems
{
@@ -75,9 +73,9 @@ typedef struct // fall back for (possibly) non-supported systems

int fsystemStats( const char * file, ksim_statfs & stats )
{
#if defined(HAVE_STATVFS) && !defined(__DragonFly__)
#if defined(HAVE_STATVFS)
return statvfs( file, &stats );
#elif defined( HAVE_STATFS ) || defined( Q_OS_FREEBSD )
#elif defined( HAVE_STATFS )
return statfs( file, &stats );
#else // fall back for (possibly) non-supported systems
(void)file;
@@ -135,8 +133,8 @@ ksim_mntent * ksim_getmntent( FILE * file )
}

#define delete_mntent( x )
#elif defined( HAVE_SYS_UCRED_H ) || defined( HAVE_SYS_MOUNT_H )
#define USE_FSSTAT
#elif defined( HAVE_GETMNTINFO )
#define USE_MNTINFO
#else
#define USE_FAILSAFE
#endif
@@ -163,10 +161,14 @@ FilesystemStats::List FilesystemStats::readEntries()
endmntent( fp );
#endif

#ifdef USE_FSSTAT
ksim_statfs sfs[32];
#ifdef USE_MNTINFO
# ifdef GETMNTINFO_USES_STATVFS
struct statvfs *sfs;
# else
struct statfs *sfs;
# endif
int fs_count;
if ( ( fs_count = ksim_getfsstat( sfs, sizeof( sfs ), 0 ) ) != -1 )
if ( ( fs_count = getmntinfo( &sfs, 0 ) ) != -1 )
{
for ( int i = 0; i < fs_count; i++ )
{


Loading…
Cancel
Save