{-# LANGUAGE CPP              #-}
{-# LANGUAGE InterruptibleFFI #-}
{-# LANGUAGE Trustworthy      #-}
module Lukko.Internal.FillBytes (fillBytes) where

#if MIN_VERSION_base(4,8,0)
import Foreign.Marshal.Utils (fillBytes)
#else
import Data.Word       (Word8)
import Foreign.C.Types (CInt (..), CSize (..))
import Foreign.Ptr     (Ptr (..))
#endif

#if !MIN_VERSION_base(4,8,0)
fillBytes :: Ptr a -> Word8 -> Int -> IO ()
fillBytes dest char size = do
    _ <- memset dest (fromIntegral char) (fromIntegral size)
    return ()

foreign import ccall unsafe "string.h" memset  :: Ptr a -> CInt  -> CSize -> IO (Ptr a)
#endif