This returns all the arguments, including those normally eaten by the
RTS (+RTS ... -RTS).
This is mainly for ghc-inplace, where we need to pass /all/ the
arguments on to the real ghc. e.g. ioref001(ghci) was failing because
the +RTS -K32m -RTS wasn't getting passed on.
--- /dev/null
+
+module GHC.Environment (getFullArgs) where
+
+import Prelude
+import Foreign
+import Foreign.C
+import Control.Monad
+
+getFullArgs :: IO [String]
+getFullArgs =
+ alloca $ \ p_argc ->
+ alloca $ \ p_argv -> do
+ getFullProgArgv p_argc p_argv
+ p <- fromIntegral `liftM` peek p_argc
+ argv <- peek p_argv
+ peekArray (p - 1) (advancePtr argv 1) >>= mapM peekCString
+
+foreign import ccall unsafe "getFullProgArgv"
+ getFullProgArgv :: Ptr CInt -> Ptr (Ptr CString) -> IO ()
+
GHC.ConsoleHandler,
GHC.Dotnet,
GHC.Enum,
+ GHC.Environment,
GHC.Err,
GHC.Exception,
GHC.Exts,