packages feed

system-linux-proc-0.1.0.0: System/Linux/Proc/File.hs

{-# LANGUAGE OverloadedStrings #-}

module System.Linux.Proc.File
  ( readProcFile
  ) where

import           Control.Error (ExceptT, handleExceptT)

import           Data.ByteString (ByteString)
import qualified Data.ByteString.Char8 as BS

import           Data.Text (Text)
import qualified Data.Text as T

import           System.IO (IOMode (..), withFile)

import           System.Linux.Proc.Errors


readProcFile :: FilePath -> ExceptT ProcError IO ByteString
readProcFile fpath =
  handleExceptT (ProcReadError fpath . ioErrorToText) $
    -- BS.readFile won't work here because it tries to get the file
    -- length before reading the file and files in the /proc filesystem
    -- are reported as having zero length.
    withFile fpath ReadMode BS.hGetContents

ioErrorToText :: IOError -> Text
ioErrorToText = T.pack . show