Well, I finally got BSD working. The actual code was every bit the
breeze I expected it to be. This module has been verified to work
correctly under FreeBSD 7.1, but integration with other code has not
been tested. I am assuming that considering the simple nature of the
code, the unchanged type signatures should be enough to conclude that
it will work.

{-
BSD - We get the value of the 'kern.proc.pathname'
      sysctl, with additional argument -1. I have
      no clue that the -1 does, but it makes the
      whole thing work, so it's good.
-}

{-# LANGUAGE ForeignFunctionInterface #-}

module System.Environment.Executable.BSD
  ( getExecutablePath, getPID ) where

import Control.Monad     ( liftM )
import System.Posix      ( getProcessID)
import System.BSD.Sysctl ( sysctlNameToOidArgs, sysctlReadString )

--------------------------------------------------------------------------------

getPID :: IO Int
getPID = liftM fromIntegral $ getProcessID

getExecutablePath :: IO FilePath
getExecutablePath = do
    pathCtl <- sysctlNameToOidArgs "kern.proc.pathname" [-1]
    sysctlReadString pathCtl

--------------------------------------------------------------------------------
--~--~---------~--~----~------------~-------~--~----~
Yi development mailing list
yi-devel@googlegroups.com
http://groups.google.com/group/yi-devel
-~----------~----~----~----~------~----~------~--~---

Reply via email to