module Bindings.Posix.Sys.Utsname where
import Foreign.Ptr (Ptr,FunPtr,plusPtr)
import Foreign.Ptr (wordPtrToPtr,castPtrToFunPtr)
import Foreign.Storable
import Foreign.C.Types
import Foreign.C.String (CString,CStringLen,CWString,CWStringLen)
import Foreign.Marshal.Alloc (alloca)
import Foreign.Marshal.Array (peekArray,pokeArray)
import Data.Int
import Data.Word
data C'utsname = C'utsname{
c'utsname'sysname :: [CChar],
c'utsname'nodename :: [CChar],
c'utsname'release :: [CChar],
c'utsname'version :: [CChar],
c'utsname'machine :: [CChar]
} deriving (Eq,Show)
p'utsname'sysname p = plusPtr p 0
p'utsname'sysname :: Ptr (C'utsname) -> Ptr (CChar)
p'utsname'nodename p = plusPtr p 65
p'utsname'nodename :: Ptr (C'utsname) -> Ptr (CChar)
p'utsname'release p = plusPtr p 130
p'utsname'release :: Ptr (C'utsname) -> Ptr (CChar)
p'utsname'version p = plusPtr p 195
p'utsname'version :: Ptr (C'utsname) -> Ptr (CChar)
p'utsname'machine p = plusPtr p 260
p'utsname'machine :: Ptr (C'utsname) -> Ptr (CChar)
instance Storable C'utsname where
sizeOf _ = 390
alignment _ = 1
peek p = do
v0 <- peekArray 65 (plusPtr p 0)
v1 <- peekArray 65 (plusPtr p 65)
v2 <- peekArray 65 (plusPtr p 130)
v3 <- peekArray 65 (plusPtr p 195)
v4 <- peekArray 65 (plusPtr p 260)
return $ C'utsname v0 v1 v2 v3 v4
poke p (C'utsname v0 v1 v2 v3 v4) = do
pokeArray (plusPtr p 0) (take 65 v0)
pokeArray (plusPtr p 65) (take 65 v1)
pokeArray (plusPtr p 130) (take 65 v2)
pokeArray (plusPtr p 195) (take 65 v3)
pokeArray (plusPtr p 260) (take 65 v4)
return ()
foreign import ccall "uname" c'uname
:: Ptr C'utsname -> IO CInt
foreign import ccall "&uname" p'uname
:: FunPtr (Ptr C'utsname -> IO CInt)