From: Ian Lynagh Date: Tue, 17 Jul 2007 14:19:18 +0000 (+0000) Subject: Implement GHC.Environment.getFullArgs X-Git-Tag: 2007-09-13~47 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=b268a419675edfb0c2d150a282230a48aa7c9c5e;p=ghc-base.git Implement GHC.Environment.getFullArgs 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. --- diff --git a/GHC/Environment.hs b/GHC/Environment.hs new file mode 100644 index 0000000..4b9b0a1 --- /dev/null +++ b/GHC/Environment.hs @@ -0,0 +1,20 @@ + +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 () + diff --git a/base.cabal b/base.cabal index 600ab03..0d79130 100644 --- a/base.cabal +++ b/base.cabal @@ -106,6 +106,7 @@ exposed-modules: GHC.ConsoleHandler, GHC.Dotnet, GHC.Enum, + GHC.Environment, GHC.Err, GHC.Exception, GHC.Exts,