~alcinnz/fontconfig-pure

9942f874b2b421d7602c9501a628fec66bf78757 — Adrian Cochrane 2 years ago 384d73c
Throw OOM errors for objectsets.
1 files changed, 4 insertions(+), 2 deletions(-)

M Graphics/Text/Font/Choose/ObjectSet.hs
M Graphics/Text/Font/Choose/ObjectSet.hs => Graphics/Text/Font/Choose/ObjectSet.hs +4 -2
@@ 5,6 5,7 @@ import Foreign.C.String (CString, withCString)

import Control.Monad (forM)
import Control.Exception (bracket)
import Graphics.Text.Font.Choose.Result (throwFalse, throwNull)

type ObjectSet = [String]



@@ 16,12 17,13 @@ type ObjectSet_ = Ptr ObjectSet'

withObjectSet :: ObjectSet -> (ObjectSet_ -> IO a) -> IO a
withObjectSet objs cb = withNewObjectSet $ \objs' -> do
    forM objs $ \obj -> withCString obj $ fcObjectSetAdd objs'
    forM objs $ \obj -> withCString obj $ \obj' ->
        throwFalse <$> fcObjectSetAdd objs' obj'
    cb objs'
foreign import ccall "FcObjectSetAdd" fcObjectSetAdd ::
    ObjectSet_ -> CString -> IO Bool

withNewObjectSet :: (ObjectSet_ -> IO a) -> IO a
withNewObjectSet cb = bracket fcObjectSetCreate fcObjectSetDestroy cb
withNewObjectSet = bracket (throwNull <$> fcObjectSetCreate) fcObjectSetDestroy
foreign import ccall "FcObjectSetCreate" fcObjectSetCreate :: IO ObjectSet_
foreign import ccall "FcObjectSetDestroy" fcObjectSetDestroy :: ObjectSet_ -> IO ()