{-# OPTIONS_GHC -optc-D__GLASGOW_HASKELL__=606 #-} {-# OPTIONS_GHC -optc-DDARWIN #-} {-# OPTIONS_GHC -optc-DSIGPROCMASK_SETS_THREAD_MASK #-} {-# INCLUDE "HsSVN.h" #-} {-# LINE 1 "Subversion/String.hsc" #-} {-# LINE 2 "Subversion/String.hsc" #-} module Subversion.String ( SVN_STRING_T , withSvnString , withSvnString' , peekSvnString , peekSvnString' ) where import Data.ByteString.Base import qualified Data.ByteString.Char8 as B8 import Foreign.C.Types import Foreign.Marshal.Alloc import Foreign.Ptr import Foreign.Storable import Subversion.Types data SVN_STRING_T pokeData :: Ptr SVN_STRING_T -> Ptr CChar -> IO () pokeData = ((\hsc_ptr -> pokeByteOff hsc_ptr 0)) {-# LINE 25 "Subversion/String.hsc" #-} peekData :: Ptr SVN_STRING_T -> IO (Ptr CChar) peekData = ((\hsc_ptr -> peekByteOff hsc_ptr 0)) {-# LINE 28 "Subversion/String.hsc" #-} pokeLen :: Ptr SVN_STRING_T -> APR_SIZE_T -> IO () pokeLen = ((\hsc_ptr -> pokeByteOff hsc_ptr 4)) {-# LINE 31 "Subversion/String.hsc" #-} peekLen :: Ptr SVN_STRING_T -> IO APR_SIZE_T peekLen = ((\hsc_ptr -> peekByteOff hsc_ptr 4)) {-# LINE 34 "Subversion/String.hsc" #-} withSvnString :: ByteString -> (Ptr SVN_STRING_T -> IO a) -> IO a withSvnString bs f = unsafeUseAsCStringLen bs $ \ (bsBuf, bsLen) -> allocaBytes ((8)) $ \ obj -> {-# LINE 40 "Subversion/String.hsc" #-} do pokeData obj bsBuf pokeLen obj (fromIntegral bsLen) f obj withSvnString' :: Maybe ByteString -> (Ptr SVN_STRING_T -> IO a) -> IO a withSvnString' Nothing f = f nullPtr withSvnString' (Just bs) f = withSvnString bs f peekSvnString :: Ptr SVN_STRING_T -> IO ByteString peekSvnString obj | obj == nullPtr = fail "peekSvnString: got a null pointer" | otherwise = do buf <- peekData obj len <- peekLen obj B8.copyCStringLen (buf, fromIntegral len) peekSvnString' :: Ptr SVN_STRING_T -> IO (Maybe ByteString) peekSvnString' obj | obj == nullPtr = return Nothing | otherwise = peekSvnString obj >>= return . Just