{-# LINE 1 "System/Posix/Process/Internals.hsc" #-}{-# LANGUAGE CApiFFI #-}{-# LANGUAGE Trustworthy #-}moduleSystem.Posix.Process.Internals(pPrPr_disableITimers ,c_execvpe ,decipherWaitStatus ,ProcessStatus (..))whereimportForeignimportForeign.CimportSystem.ExitimportSystem.IO.ErrorimportGHC.Conc(Signal){-# LINE 20 "System/Posix/Process/Internals.hsc" #-}-- | The exit status of a processdataProcessStatus =Exited ExitCode-- ^ the process exited by calling-- @exit()@ or returning from @main@|Terminated SignalBool-- ^ the process was terminated by a-- signal, the @Bool@ is @True@ if a core-- dump was produced---- @since 2.7.0.0|Stopped Signal-- ^ the process was stopped by a signalderiving(ProcessStatus -> ProcessStatus -> Bool (ProcessStatus -> ProcessStatus -> Bool) -> (ProcessStatus -> ProcessStatus -> Bool) -> Eq ProcessStatus forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: ProcessStatus -> ProcessStatus -> Bool == :: ProcessStatus -> ProcessStatus -> Bool $c/= :: ProcessStatus -> ProcessStatus -> Bool /= :: ProcessStatus -> ProcessStatus -> Bool Eq,Eq ProcessStatus Eq ProcessStatus => (ProcessStatus -> ProcessStatus -> Ordering) -> (ProcessStatus -> ProcessStatus -> Bool) -> (ProcessStatus -> ProcessStatus -> Bool) -> (ProcessStatus -> ProcessStatus -> Bool) -> (ProcessStatus -> ProcessStatus -> Bool) -> (ProcessStatus -> ProcessStatus -> ProcessStatus) -> (ProcessStatus -> ProcessStatus -> ProcessStatus) -> Ord ProcessStatus ProcessStatus -> ProcessStatus -> Bool ProcessStatus -> ProcessStatus -> Ordering ProcessStatus -> ProcessStatus -> ProcessStatus forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: ProcessStatus -> ProcessStatus -> Ordering compare :: ProcessStatus -> ProcessStatus -> Ordering $c< :: ProcessStatus -> ProcessStatus -> Bool < :: ProcessStatus -> ProcessStatus -> Bool $c<= :: ProcessStatus -> ProcessStatus -> Bool <= :: ProcessStatus -> ProcessStatus -> Bool $c> :: ProcessStatus -> ProcessStatus -> Bool > :: ProcessStatus -> ProcessStatus -> Bool $c>= :: ProcessStatus -> ProcessStatus -> Bool >= :: ProcessStatus -> ProcessStatus -> Bool $cmax :: ProcessStatus -> ProcessStatus -> ProcessStatus max :: ProcessStatus -> ProcessStatus -> ProcessStatus $cmin :: ProcessStatus -> ProcessStatus -> ProcessStatus min :: ProcessStatus -> ProcessStatus -> ProcessStatus Ord,Int -> ProcessStatus -> ShowS [ProcessStatus] -> ShowS ProcessStatus -> String (Int -> ProcessStatus -> ShowS) -> (ProcessStatus -> String) -> ([ProcessStatus] -> ShowS) -> Show ProcessStatus forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> ProcessStatus -> ShowS showsPrec :: Int -> ProcessStatus -> ShowS $cshow :: ProcessStatus -> String show :: ProcessStatus -> String $cshowList :: [ProcessStatus] -> ShowS showList :: [ProcessStatus] -> ShowS Show)-- this function disables the itimer, which would otherwise cause confusing-- signals to be sent to the new process.foreignimportcapiunsafe"Rts.h stopTimer"pPrPr_disableITimers ::IO()foreignimportccallunsafe"__hsunix_execvpe"c_execvpe ::CString->PtrCString->PtrCString->IOCInt{-# LINE 48 "System/Posix/Process/Internals.hsc" #-}decipherWaitStatus ::CInt->IOProcessStatus decipherWaitStatus :: CInt -> IO ProcessStatus decipherWaitStatus CInt wstat =ifCInt -> CInt c_WIFEXITED CInt wstat CInt -> CInt -> Bool forall a. Eq a => a -> a -> Bool /=CInt 0thendoletexitstatus :: CInt exitstatus =CInt -> CInt c_WEXITSTATUS CInt wstat ifCInt exitstatus CInt -> CInt -> Bool forall a. Eq a => a -> a -> Bool ==CInt 0thenProcessStatus -> IO ProcessStatus forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return(ExitCode -> ProcessStatus Exited ExitCode ExitSuccess)elseProcessStatus -> IO ProcessStatus forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return(ExitCode -> ProcessStatus Exited (Int -> ExitCode ExitFailure(CInt -> Int forall a b. (Integral a, Num b) => a -> b fromIntegralCInt exitstatus )))elsedoifCInt -> CInt c_WIFSIGNALED CInt wstat CInt -> CInt -> Bool forall a. Eq a => a -> a -> Bool /=CInt 0thendolettermsig :: CInt termsig =CInt -> CInt c_WTERMSIG CInt wstat letcoredumped :: Bool coredumped =CInt -> CInt c_WCOREDUMP CInt wstat CInt -> CInt -> Bool forall a. Eq a => a -> a -> Bool /=CInt 0ProcessStatus -> IO ProcessStatus forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return(CInt -> Bool -> ProcessStatus Terminated CInt termsig Bool coredumped )elsedoifCInt -> CInt c_WIFSTOPPED CInt wstat CInt -> CInt -> Bool forall a. Eq a => a -> a -> Bool /=CInt 0thendoletstopsig :: CInt stopsig =CInt -> CInt c_WSTOPSIG CInt wstat ProcessStatus -> IO ProcessStatus forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return(CInt -> ProcessStatus Stopped CInt stopsig )elsedoIOError -> IO ProcessStatus forall a. IOError -> IO a ioError(IOErrorType -> String -> Maybe Handle -> Maybe String -> IOError mkIOErrorIOErrorType illegalOperationErrorTypeString "waitStatus"Maybe Handle forall a. Maybe a NothingMaybe String forall a. Maybe a Nothing)foreignimportcapiunsafe"HsUnix.h WIFEXITED"c_WIFEXITED ::CInt->CIntforeignimportcapiunsafe"HsUnix.h WEXITSTATUS"c_WEXITSTATUS ::CInt->CIntforeignimportcapiunsafe"HsUnix.h WIFSIGNALED"c_WIFSIGNALED ::CInt->CIntforeignimportcapiunsafe"HsUnix.h WTERMSIG"c_WTERMSIG ::CInt->CIntforeignimportcapiunsafe"HsUnix.h WIFSTOPPED"c_WIFSTOPPED ::CInt->CIntforeignimportcapiunsafe"HsUnix.h WSTOPSIG"c_WSTOPSIG ::CInt->CIntforeignimportcapiunsafe"HsUnix.h WCOREDUMP"c_WCOREDUMP ::CInt->CInt{-# LINE 95 "System/Posix/Process/Internals.hsc" #-}