summaryrefslogtreecommitdiff
path: root/libraries/base/Foreign
diff options
context:
space:
mode:
authorAlex Petrov <alexp@coffeenco.de>2014-11-21 19:24:37 +0100
committerHerbert Valerio Riedel <hvr@gnu.org>2014-11-21 20:49:54 +0100
commit35833122da8ddb2c0e7aaee0c9b6089af52e38b1 (patch)
tree6ab94fdea8ffa9e2afd3e19a7d3d7378037ceb8c /libraries/base/Foreign
parentc0ad5bc03e02ce0d7d545599e4b1a68a6f727f2b (diff)
downloadhaskell-35833122da8ddb2c0e7aaee0c9b6089af52e38b1.tar.gz
Add 'fillBytes' to Foreign.Marshal.Utils.
fillBytes uses 'memset' to fill a memory area with a given byte value. Reviewed By: austin, hvr Differential Revision: https://phabricator.haskell.org/D465
Diffstat (limited to 'libraries/base/Foreign')
-rw-r--r--libraries/base/Foreign/Marshal/Utils.hs19
1 files changed, 17 insertions, 2 deletions
diff --git a/libraries/base/Foreign/Marshal/Utils.hs b/libraries/base/Foreign/Marshal/Utils.hs
index 4654e550f2..c24c249a8d 100644
--- a/libraries/base/Foreign/Marshal/Utils.hs
+++ b/libraries/base/Foreign/Marshal/Utils.hs
@@ -43,13 +43,18 @@ module Foreign.Marshal.Utils (
--
copyBytes,
moveBytes,
+
+ -- ** Filling up memory area with required values
+ --
+ fillBytes,
) where
import Data.Maybe
import Foreign.Ptr ( Ptr, nullPtr )
import Foreign.Storable ( Storable(poke) )
-import Foreign.C.Types ( CSize(..) )
+import Foreign.C.Types ( CSize(..), CInt(..) )
import Foreign.Marshal.Alloc ( malloc, alloca )
+import Data.Word ( Word8 )
import GHC.Real ( fromIntegral )
import GHC.Num
@@ -161,6 +166,16 @@ moveBytes :: Ptr a -> Ptr a -> Int -> IO ()
moveBytes dest src size = do _ <- memmove dest src (fromIntegral size)
return ()
+-- Filling up memory area with required values
+-- -------------------------------------------
+
+-- |Fill a given number of bytes in memory area with a byte value.
+--
+-- /Since: 4.8.0.0/
+fillBytes :: Ptr a -> Word8 -> Int -> IO ()
+fillBytes dest char size = do
+ _ <- memset dest (fromIntegral char) (fromIntegral size)
+ return ()
-- auxilliary routines
-- -------------------
@@ -169,4 +184,4 @@ moveBytes dest src size = do _ <- memmove dest src (fromIntegral size)
--
foreign import ccall unsafe "string.h" memcpy :: Ptr a -> Ptr a -> CSize -> IO (Ptr a)
foreign import ccall unsafe "string.h" memmove :: Ptr a -> Ptr a -> CSize -> IO (Ptr a)
-
+foreign import ccall unsafe "string.h" memset :: Ptr a -> CInt -> CSize -> IO (Ptr a)