{-# LINE 1 "src/Bindings/Posix/Sys/Utsname.hsc" #-}

{-# LINE 2 "src/Bindings/Posix/Sys/Utsname.hsc" #-}

{-# LINE 3 "src/Bindings/Posix/Sys/Utsname.hsc" #-}

-- | <http://www.opengroup.org/onlinepubs/9699919799/basedefs/sys_utsname.h.html>

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

{-# LINE 8 "src/Bindings/Posix/Sys/Utsname.hsc" #-}


{-# LINE 10 "src/Bindings/Posix/Sys/Utsname.hsc" #-}

{-# LINE 11 "src/Bindings/Posix/Sys/Utsname.hsc" #-}

{-# LINE 12 "src/Bindings/Posix/Sys/Utsname.hsc" #-}

{-# LINE 13 "src/Bindings/Posix/Sys/Utsname.hsc" #-}

{-# LINE 14 "src/Bindings/Posix/Sys/Utsname.hsc" #-}

{-# LINE 15 "src/Bindings/Posix/Sys/Utsname.hsc" #-}
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 ()

{-# LINE 16 "src/Bindings/Posix/Sys/Utsname.hsc" #-}

foreign import ccall "uname" c'uname
  :: Ptr C'utsname -> IO CInt
foreign import ccall "&uname" p'uname
  :: FunPtr (Ptr C'utsname -> IO CInt)

{-# LINE 18 "src/Bindings/Posix/Sys/Utsname.hsc" #-}