X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=System%2FCPUTime.hsc;h=a25c750ff3bf6dd0b37040902796faaa58c819e0;hb=41e8fba828acbae1751628af50849f5352b27873;hp=cb23d93ca3ae3824cb5cae7a2d3da8958782b9fd;hpb=d6f68560e2b632b595daea0fb4dd6ca03e45c54a;p=ghc-base.git diff --git a/System/CPUTime.hsc b/System/CPUTime.hsc index cb23d93..a25c750 100644 --- a/System/CPUTime.hsc +++ b/System/CPUTime.hsc @@ -1,3 +1,5 @@ +{-# LANGUAGE CPP, NondecreasingIndentation, ForeignFunctionInterface #-} + ----------------------------------------------------------------------------- -- | -- Module : System.CPUTime @@ -31,8 +33,11 @@ import CPUTime ( getCPUTime, cpuTimePrecision ) #endif #ifdef __GLASGOW_HASKELL__ -import Foreign +import Foreign hiding (unsafePerformIO) import Foreign.C +#if !defined(CLK_TCK) +import System.IO.Unsafe (unsafePerformIO) +#endif #include "HsBaseConfig.h" @@ -91,7 +96,7 @@ getCPUTime = do -- #if defined(HAVE_GETRUSAGE) && ! irix_HOST_OS && ! solaris2_HOST_OS allocaBytes (#const sizeof(struct rusage)) $ \ p_rusage -> do - getrusage (#const RUSAGE_SELF) p_rusage + throwErrnoIfMinus1_ "getrusage" $ getrusage (#const RUSAGE_SELF) p_rusage let ru_utime = (#ptr struct rusage, ru_utime) p_rusage let ru_stime = (#ptr struct rusage, ru_stime) p_rusage @@ -108,7 +113,7 @@ foreign import ccall unsafe getrusage :: CInt -> Ptr CRUsage -> IO CInt #else # if defined(HAVE_TIMES) allocaBytes (#const sizeof(struct tms)) $ \ p_tms -> do - times p_tms + _ <- times p_tms u_ticks <- (#peek struct tms,tms_utime) p_tms :: IO CClock s_ticks <- (#peek struct tms,tms_stime) p_tms :: IO CClock return (( (realToInteger u_ticks + realToInteger s_ticks) * 1000000000000)