-- | Helper functions used by Compilation module. module Text.Sass.Compilation.Internal ( newCString ) where import Data.ByteString (ByteString) import qualified Data.ByteString.Internal as BI import Foreign import Foreign.C hiding (newCString) import Foreign.Marshal.Alloc (mallocBytes) -- | Copies 'ByteString' to newly allocated 'CString'. The result must be -- | explicitly freed using 'free' or 'finalizerFree'. newCString :: ByteString -> IO CString newCString (BI.PS fp o l) = do buf <- mallocBytes (l + 1) withForeignPtr fp $ \p -> do BI.memcpy buf (p `plusPtr` o) (fromIntegral l) pokeByteOff buf l (0::Word8) return $ castPtr buf