Repository : ssh://darcs.haskell.org//srv/darcs/packages/bytestring On branch : ghc-7.6
http://hackage.haskell.org/trac/ghc/changeset/c706c000f94f044b3042c9a5deaf245372fb0cdd >--------------------------------------------------------------- commit c706c000f94f044b3042c9a5deaf245372fb0cdd Author: Lauri Alanko <[email protected]> Date: Wed Jun 20 09:22:32 2012 +0000 Add unsafePackMallocCStringLen >--------------------------------------------------------------- Data/ByteString/Unsafe.hs | 17 +++++++++++++++++ 1 files changed, 17 insertions(+), 0 deletions(-) diff --git a/Data/ByteString/Unsafe.hs b/Data/ByteString/Unsafe.hs index cf091a6..2aae1a9 100644 --- a/Data/ByteString/Unsafe.hs +++ b/Data/ByteString/Unsafe.hs @@ -36,6 +36,7 @@ module Data.ByteString.Unsafe ( unsafePackCString, -- :: CString -> IO ByteString unsafePackCStringLen, -- :: CStringLen -> IO ByteString unsafePackMallocCString,-- :: CString -> IO ByteString + unsafePackMallocCStringLen, -- :: CStringLen -> IO ByteString #if defined(__GLASGOW_HASKELL__) unsafePackAddress, -- :: Addr# -> IO ByteString @@ -263,6 +264,22 @@ unsafePackMallocCString cstr = do len <- c_strlen cstr return $! PS fp 0 (fromIntegral len) +-- | /O(n)/ Build a @ByteString@ from a malloced @CStringLen@. This +-- value will have a @free(3)@ finalizer associated to it. +-- +-- This funtion is /unsafe/. If the original @CString@ is later +-- modified, this change will be reflected in the resulting @ByteString@, +-- breaking referential transparency. +-- +-- This function is also unsafe if you call its finalizer twice, +-- which will result in a /double free/ error, or if you pass it +-- a CString not allocated with 'malloc'. +-- +unsafePackMallocCStringLen :: CStringLen -> IO ByteString +unsafePackMallocCStringLen (cstr, len) = do + fp <- newForeignPtr c_free_finalizer (castPtr cstr) + return $! PS fp 0 len + -- --------------------------------------------------------------------- -- | /O(1) construction/ Use a @ByteString@ with a function requiring a _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
