From 4dfc4d2d8415d0c3956bf4e582ea7602b0cf60b5 Mon Sep 17 00:00:00 2001
From: Ian Lynagh <igloo@earth.li>
Date: Tue, 17 Jul 2007 14:19:18 +0000
Subject: [PATCH] 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.

---
 GHC/Environment.hs | 20 ++++++++++++++++++++
 base.cabal         |  1 +
 2 files changed, 21 insertions(+)
 create mode 100644 GHC/Environment.hs

diff --git a/GHC/Environment.hs b/GHC/Environment.hs
new file mode 100644
index 00000000..4b9b0a1b
--- /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 600ab03d..0d791304 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,
-- 
GitLab