packages feed

linux-file-extents-0.2.0.0: examples/print-extents.hs

import System.Linux.FileExtents
import System.Environment
import System.IO
import Control.Monad
import Control.Exception

main :: IO ()
main = do
    args <- getArgs
    case args of
        "-v" : paths ->
            forM_ paths $ handleIOExn . printExtents
        paths ->
            forM_ paths $ handleIOExn . printExtentCount

printExtents :: FilePath -> IO ()
printExtents path = do
    exts <- getExtents defReqFlags path Nothing
    putStrLn $ path ++ ":"
    forM_ exts $ \ext ->
        putStrLn $ "    " ++ show ext
    putStrLn $ "  " ++ show (length exts) ++ " extent(s)"

printExtentCount :: FilePath -> IO ()
printExtentCount path = do
    c <- getExtentCount defReqFlags path Nothing
    putStrLn $ show c ++ "\t" ++ path

handleIOExn :: IO () -> IO ()
handleIOExn =
    handle (\e -> hPrint stderr (e ::  IOException))