hsyslog-5: src/System/Posix/Syslog/LogMask.hs
{- |
Maintainer: simons@cryp.to
Stability: provisional
Portability: POSIX
FFI bindings to @syslog(3)@ from
<http://pubs.opengroup.org/onlinepubs/9699919799/functions/syslog.html POSIX.1-2008>.
This module is intended for purposes of low-level implementation. Users of
this library should prefer safer and more convenient API provided by
"System.Posix.Syslog".
-}
module System.Posix.Syslog.LogMask where
import System.Posix.Syslog.Functions ( _logMask )
import System.Posix.Syslog.Priority ( Priority, fromPriority )
import Data.Bits
import Foreign.C.Types
-- | Convert a set of logging priorities into a system-dependent binary
-- representation suitable for calling '_setlogmask'.
toLogMask :: [Priority] -> CInt
toLogMask = foldr (.|.) 0 . map (_logMask . fromPriority)
-- | Decode the the system-dependent binary representation returned by
-- '_setlogmask' back into a set of logging priorities.
fromLogMask :: CInt -> [Priority]
fromLogMask old = [ p | p <- [minBound..maxBound], _logMask (fromPriority p) .&. old /= 0 ]