system-argv0 (empty) → 0.1
raw patch · 4 files changed
+127/−0 lines, 4 filesdep +basedep +system-filepathsetup-changed
Dependencies added: base, system-filepath
Files
- Setup.hs +2/−0
- lib/System/Argv0.hs +63/−0
- license.txt +22/−0
- system-argv0.cabal +40/−0
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ lib/System/Argv0.hs view
@@ -0,0 +1,63 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE ForeignFunctionInterface #-}++module System.Argv0+ ( getArgv0+ ) where++import Prelude hiding (FilePath)++import Foreign+import Foreign.C+#if defined(mingw32_HOST_OS) && __GLASGOW_HASKELL__ >= 702+import GHC.Environment (getFullArgs)+#endif++import Filesystem.Path (FilePath)+import Filesystem.Path.CurrentOS (decodeString)++-- | Get @argv[0]@ as a 'FilePath'. This is how the program was invoked, and+-- might not correspond to any actual file.+--+-- Use this instead of @System.Environment.getProgName@ if you want the full+-- path, and not just the last component.+getArgv0 :: IO FilePath++#if defined(mingw32_HOST_OS) && __GLASGOW_HASKELL__ >= 702+getArgv0 = do+ m_argv0 <- getWin32ProgArgv0+ argv0 <- maybe (fmap head getFullArgs) return m_argv0+ return (decodeString argv0)++getWin32ProgArgv0 :: IO (Maybe String)+getWin32ProgArgv0 =+ alloca $ \p_argc ->+ alloca $ \p_argv -> do+ c_getWin32ProgArgv p_argc p_argv+ argv <- peek p_argv+ if argv == nullPtr+ then return Nothing+ else do+ argv0 <- peekCWString =<< peekElemOff argv 0+ return (Just argv0)++foreign import ccall unsafe "getWin32ProgArgv"+ c_getWin32ProgArgv :: Ptr CInt -> Ptr (Ptr CWString) -> IO ()++#else+getArgv0 =+ alloca $ \p_argc ->+ alloca $ \p_argv -> do+ c_getProgArgv p_argc p_argv+ argv <- peek p_argv+#ifdef mingw32_HOST_OS+ argv0 <- peekCString =<< peekElemOff argv 0+#else+ argv0 <- peekCAString =<< peekElemOff argv 0+#endif+ return (decodeString argv0)++foreign import ccall unsafe "getProgArgv"+ c_getProgArgv :: Ptr CInt -> Ptr (Ptr CString) -> IO ()++#endif
+ license.txt view
@@ -0,0 +1,22 @@+Copyright (c) 2011 John Millikin++Permission is hereby granted, free of charge, to any person+obtaining a copy of this software and associated documentation+files (the "Software"), to deal in the Software without+restriction, including without limitation the rights to use,+copy, modify, merge, publish, distribute, sublicense, and/or sell+copies of the Software, and to permit persons to whom the+Software is furnished to do so, subject to the following+conditions:++The above copyright notice and this permission notice shall be+included in all copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR+OTHER DEALINGS IN THE SOFTWARE.
+ system-argv0.cabal view
@@ -0,0 +1,40 @@+name: system-argv0+version: 0.1+license: MIT+license-file: license.txt+author: John Millikin <jmillikin@gmail.com>+maintainer: John Millikin <jmillikin@gmail.com>+build-type: Simple+cabal-version: >= 1.6+category: System+stability: experimental+homepage: https://john-millikin.com/software/hs-argv0/+bug-reports: mailto:jmillikin@gmail.com++synopsis: Get @argv[0]@ as a FilePath.+description:+ Get @argv[0]@ as a FilePath. This is how the program was invoked, and might+ not correspond to any actual file.+ .+ Use this instead of @System.Environment.getProgName@ if you want the full+ path, and not just the last component.++source-repository head+ type: bazaar+ location: https://john-millikin.com/software/hs-argv0/++source-repository this+ type: bazaar+ location: https://john-millikin.com/branches/hs-argv0/0.1/+ tag: system-argv0_0.1++library+ hs-source-dirs: lib+ ghc-options: -Wall -O2++ build-depends:+ base >= 4.0 && < 5.0+ , system-filepath >= 0.3.1 && < 0.5++ exposed-modules:+ System.Argv0