summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorJose Antonio Ortega Ruiz <jao@gnu.org>2012-07-28 21:21:35 +0200
committerJose Antonio Ortega Ruiz <jao@gnu.org>2012-07-28 21:21:35 +0200
commitededb764b496669013198419a56f2ee513d52587 (patch)
tree0f0379bc60ea332aed032c17e5218358af6b0a62 /src
parent42f47c612a5aa113bdb5637c56c5bfaa1a98d846 (diff)
downloadxmobar-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.hs19
-rw-r--r--src/StatFS.hsc6
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
}