{-# LINE 1 "Network/Socket/Posix/HostName.hsc" #-}
module Network.Socket.Posix.HostName (
getHostName,
)
where
import Foreign.C.Error
import Foreign.C.String
import Foreign.C.Types
import Foreign.Marshal.Array
import Network.Socket.Info (HostName)
foreign import ccall unsafe "gethostname"
gethostname :: CString -> CSize -> IO CInt
getHostName :: IO HostName
getHostName :: IO HostName
getHostName = Int -> (Ptr CChar -> IO HostName) -> IO HostName
forall a b. Storable a => Int -> (Ptr a -> IO b) -> IO b
allocaArray0 Int
size ((Ptr CChar -> IO HostName) -> IO HostName)
-> (Ptr CChar -> IO HostName) -> IO HostName
forall a b. (a -> b) -> a -> b
$ \Ptr CChar
cstr -> do
HostName -> IO CInt -> IO ()
forall a. (Eq a, Num a) => HostName -> IO a -> IO ()
throwErrnoIfMinus1_ HostName
"getHostName" (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> CSize -> IO CInt
gethostname Ptr CChar
cstr (Int -> CSize
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
size)
Ptr CChar -> IO HostName
peekCString Ptr CChar
cstr
where
size :: Int
size = Int
256