Implement GHC.Environment.getFullArgs
authorIan Lynagh <igloo@earth.li>
Tue, 17 Jul 2007 14:19:18 +0000 (14:19 +0000)
committerIan Lynagh <igloo@earth.li>
Tue, 17 Jul 2007 14:19:18 +0000 (14:19 +0000)
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.

GHC/Environment.hs [new file with mode: 0644]
base.cabal

diff --git a/GHC/Environment.hs b/GHC/Environment.hs
new file mode 100644 (file)
index 0000000..4b9b0a1
--- /dev/null
@@ -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 ()
+
index 600ab03..0d79130 100644 (file)
@@ -106,6 +106,7 @@ exposed-modules:
        GHC.ConsoleHandler,
        GHC.Dotnet,
        GHC.Enum,
+       GHC.Environment,
        GHC.Err,
        GHC.Exception,
        GHC.Exts,