aboutsummaryrefslogtreecommitdiffhomepage
path: root/System/Posix/Resource.hsc
diff options
context:
space:
mode:
Diffstat (limited to 'System/Posix/Resource.hsc')
-rw-r--r--System/Posix/Resource.hsc18
1 files changed, 8 insertions, 10 deletions
diff --git a/System/Posix/Resource.hsc b/System/Posix/Resource.hsc
index fa4d3b3..165bed4 100644
--- a/System/Posix/Resource.hsc
+++ b/System/Posix/Resource.hsc
@@ -1,12 +1,6 @@
-{-# OPTIONS_GHC -w #-}
#ifdef __GLASGOW_HASKELL__
{-# LANGUAGE Trustworthy #-}
#endif
--- The above warning supression flag is a temporary kludge.
--- While working on this module you are encouraged to remove it and fix
--- any warnings in the module. See
--- http://hackage.haskell.org/trac/ghc/wiki/WorkingConventions#Warnings
--- for details
-----------------------------------------------------------------------------
-- |
-- Module : System.Posix.Resource
@@ -70,7 +64,7 @@ foreign import ccall unsafe "HsUnix.h __hscore_setrlimit"
getResourceLimit :: Resource -> IO ResourceLimits
getResourceLimit res = do
allocaBytes (#const sizeof(struct rlimit)) $ \p_rlimit -> do
- throwErrnoIfMinus1 "getResourceLimit" $
+ throwErrnoIfMinus1_ "getResourceLimit" $
c_getrlimit (packResource res) p_rlimit
soft <- (#peek struct rlimit, rlim_cur) p_rlimit
hard <- (#peek struct rlimit, rlim_max) p_rlimit
@@ -84,7 +78,7 @@ setResourceLimit res ResourceLimits{softLimit=soft,hardLimit=hard} = do
allocaBytes (#const sizeof(struct rlimit)) $ \p_rlimit -> do
(#poke struct rlimit, rlim_cur) p_rlimit (packRLimit soft True)
(#poke struct rlimit, rlim_max) p_rlimit (packRLimit hard False)
- throwErrnoIfMinus1 "setResourceLimit" $
+ throwErrnoIfMinus1_ "setResourceLimit" $
c_setrlimit (packResource res) p_rlimit
return ()
@@ -101,16 +95,20 @@ packResource ResourceTotalMemory = (#const RLIMIT_AS)
unpackRLimit :: CRLim -> ResourceLimit
unpackRLimit (#const RLIM_INFINITY) = ResourceLimitInfinity
-#ifdef RLIM_SAVED_MAX
+#if defined(RLIM_SAVED_MAX) && (RLIM_SAVED_MAX != RLIM_INFINITY)
unpackRLimit (#const RLIM_SAVED_MAX) = ResourceLimitUnknown
+#endif
+#if defined(RLIM_SAVED_CUR) && (RLIM_SAVED_CUR != RLIM_INFINITY)
unpackRLimit (#const RLIM_SAVED_CUR) = ResourceLimitUnknown
#endif
unpackRLimit other = ResourceLimit (fromIntegral other)
packRLimit :: ResourceLimit -> Bool -> CRLim
packRLimit ResourceLimitInfinity _ = (#const RLIM_INFINITY)
-#ifdef RLIM_SAVED_MAX
+#ifdef RLIM_SAVED_CUR
packRLimit ResourceLimitUnknown True = (#const RLIM_SAVED_CUR)
+#endif
+#ifdef RLIM_SAVED_MAX
packRLimit ResourceLimitUnknown False = (#const RLIM_SAVED_MAX)
#endif
packRLimit (ResourceLimit other) _ = fromIntegral other