From b1639dda870f22a78136b26295f98585e503fa98 Mon Sep 17 00:00:00 2001 From: Benjamin Barenblat Date: Fri, 31 Aug 2018 17:14:38 -0400 Subject: Marshal `ByteString` input arguments to `fun`s --- src/BTLS/Buffer.hs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (limited to 'src/BTLS/Buffer.hs') diff --git a/src/BTLS/Buffer.hs b/src/BTLS/Buffer.hs index d7b3f14..186054f 100644 --- a/src/BTLS/Buffer.hs +++ b/src/BTLS/Buffer.hs @@ -13,29 +13,25 @@ -- the License. module BTLS.Buffer - ( unsafeUseAsCUStringLen + ( unsafeUseAsCBuffer , packCUStringLen ) where import Data.ByteString (ByteString) import qualified Data.ByteString as ByteString import qualified Data.ByteString.Unsafe as ByteString -import Foreign (Ptr) +import Foreign (Ptr, castPtr) import Foreign.C.Types import Unsafe.Coerce (unsafeCoerce) -unsafeUseAsCUStringLen :: - Integral n => ByteString -> ((Ptr CUChar, n) -> IO a) -> IO a -unsafeUseAsCUStringLen bs f = +unsafeUseAsCBuffer :: ByteString -> ((Ptr a, CULong) -> IO b) -> IO b +unsafeUseAsCBuffer bs f = ByteString.unsafeUseAsCStringLen bs $ \(pStr, len) -> - f (asCUCharBuf pStr, fromIntegral len) + f (castPtr pStr, fromIntegral len) packCUStringLen :: Integral n => (Ptr CUChar, n) -> IO ByteString packCUStringLen (pStr, len) = ByteString.packCStringLen (asCCharBuf pStr, fromIntegral len) -asCUCharBuf :: Ptr CChar -> Ptr CUChar -asCUCharBuf = unsafeCoerce - asCCharBuf :: Ptr CUChar -> Ptr CChar asCCharBuf = unsafeCoerce -- cgit v1.2.3