summaryrefslogtreecommitdiff
path: root/libraries/base/GHC/Environment.hs
blob: 60325b36118923a9a7009d7cbfeca141926b0b4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{-# LANGUAGE ForeignFunctionInterface #-}

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 ()