diff options
author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2012-07-28 21:21:35 +0200 |
---|---|---|
committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2012-07-28 21:21:35 +0200 |
commit | ededb764b496669013198419a56f2ee513d52587 (patch) | |
tree | 0f0379bc60ea332aed032c17e5218358af6b0a62 /src | |
parent | 42f47c612a5aa113bdb5637c56c5bfaa1a98d846 (diff) | |
download | xmobar-ededb764b496669013198419a56f2ee513d52587.tar.gz xmobar-ededb764b496669013198419a56f2ee513d52587.tar.bz2 |
Fixes for DiskU, which was exploding on recent Linux
We're using now the recommended statvfs interface, instead of the
obsolete statfs64. Moreover, we compute correctly the used space.
Diffstat (limited to 'src')
-rw-r--r-- | src/Plugins/Monitors/Disk.hs | 19 | ||||
-rw-r--r-- | src/StatFS.hsc | 6 |
2 files changed, 13 insertions, 12 deletions
diff --git a/src/Plugins/Monitors/Disk.hs b/src/Plugins/Monitors/Disk.hs index 725fe29..554be05 100644 --- a/src/Plugins/Monitors/Disk.hs +++ b/src/Plugins/Monitors/Disk.hs @@ -77,15 +77,6 @@ parseDev dat dev = dat' = if length xs > 6 then [sp, rSp, wSp] else [0, 0, 0] in (dev, dat') -fsStats :: String -> IO [Integer] -fsStats path = do - stats <- getFileSystemStats path - case stats of - Nothing -> return [0, 0, 0] - Just f -> let tot = fsStatByteCount f - free = fsStatBytesAvailable f - in return [tot, free, tot - free] - speedToStr :: Float -> String speedToStr = showWithUnits 2 1 @@ -131,6 +122,16 @@ startDiskIO disks args rate cb = do _ <- mountedData dref (map fst mounted) runM args diskIOConfig (runDiskIO dref disks) rate cb +fsStats :: String -> IO [Integer] +fsStats path = do + stats <- getFileSystemStats path + case stats of + Nothing -> return [0, 0, 0] + Just f -> let tot = fsStatByteCount f + free = fsStatBytesAvailable f + used = fsStatBytesUsed f + in return [tot, free, used] + runDiskU' :: String -> String -> Monitor String runDiskU' tmp path = do setConfigValue tmp template diff --git a/src/StatFS.hsc b/src/StatFS.hsc index e1cb89c..050c19b 100644 --- a/src/StatFS.hsc +++ b/src/StatFS.hsc @@ -54,7 +54,7 @@ data CStatfs #ifdef IS_BSD_SYSTEM foreign import ccall unsafe "sys/mount.h statfs" #else -foreign import ccall unsafe "sys/vfs.h statfs64" +foreign import ccall unsafe "sys/statvfs.h statvfs" #endif c_statfs :: CString -> Ptr CStatfs -> IO CInt @@ -66,7 +66,7 @@ getFileSystemStats path = allocaBytes (#size struct statfs) $ \vfs -> useAsCString (pack path) $ \cpath -> do res <- c_statfs cpath vfs - if res == -1 then return Nothing + if res /= 0 then return Nothing else do bsize <- (#peek struct statfs, f_bsize) vfs bcount <- (#peek struct statfs, f_blocks) vfs @@ -79,5 +79,5 @@ getFileSystemStats path = , fsStatByteCount = toI bcount * bpb , fsStatBytesFree = toI bfree * bpb , fsStatBytesAvailable = toI bavail * bpb - , fsStatBytesUsed = toI (max 0 (bcount - bavail)) * bpb + , fsStatBytesUsed = toI (bcount - bfree) * bpb } |