{-# LANGUAGE CPP #-}
{-# LANGUAGE Safe #-}
module Data.Time.Clock.Internal.CTimeval where
#ifndef mingw32_HOST_OS
import Foreign
import Foreign.C
data CTimeval =
MkCTimeval CLong
CLong
instance Storable CTimeval where
sizeOf :: CTimeval -> Int
sizeOf CTimeval
_ = (CLong -> Int
forall a. Storable a => a -> Int
sizeOf (CLong
forall a. HasCallStack => a
undefined :: CLong)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
2
alignment :: CTimeval -> Int
alignment CTimeval
_ = CLong -> Int
forall a. Storable a => a -> Int
alignment (CLong
forall a. HasCallStack => a
undefined :: CLong)
peek :: Ptr CTimeval -> IO CTimeval
peek Ptr CTimeval
p = do
s <- Ptr CLong -> Int -> IO CLong
forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff (Ptr CTimeval -> Ptr CLong
forall a b. Ptr a -> Ptr b
castPtr Ptr CTimeval
p) Int
0
mus <- peekElemOff (castPtr p) 1
return (MkCTimeval s mus)
poke :: Ptr CTimeval -> CTimeval -> IO ()
poke Ptr CTimeval
p (MkCTimeval CLong
s CLong
mus) = do
Ptr CLong -> Int -> CLong -> IO ()
forall a. Storable a => Ptr a -> Int -> a -> IO ()
pokeElemOff (Ptr CTimeval -> Ptr CLong
forall a b. Ptr a -> Ptr b
castPtr Ptr CTimeval
p) Int
0 CLong
s
Ptr CLong -> Int -> CLong -> IO ()
forall a. Storable a => Ptr a -> Int -> a -> IO ()
pokeElemOff (Ptr CTimeval -> Ptr CLong
forall a b. Ptr a -> Ptr b
castPtr Ptr CTimeval
p) Int
1 CLong
mus
foreign import ccall unsafe "time.h gettimeofday" gettimeofday :: Ptr CTimeval -> Ptr () -> IO CInt
getCTimeval :: IO CTimeval
getCTimeval :: IO CTimeval
getCTimeval =
CTimeval -> (Ptr CTimeval -> IO CTimeval) -> IO CTimeval
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with
(CLong -> CLong -> CTimeval
MkCTimeval CLong
0 CLong
0)
(\Ptr CTimeval
ptval -> do
String -> IO CInt -> IO ()
forall a. (Eq a, Num a) => String -> IO a -> IO ()
throwErrnoIfMinus1_ String
"gettimeofday" (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CTimeval -> Ptr () -> IO CInt
gettimeofday Ptr CTimeval
ptval Ptr ()
forall a. Ptr a
nullPtr
Ptr CTimeval -> IO CTimeval
forall a. Storable a => Ptr a -> IO a
peek Ptr CTimeval
ptval)
#endif