[Fencommits] fenfire-hs: Use System.Glib.UTFString in Raptor instead of CString
Tuukka Hastrup
Tuukka.Hastrup at iki.fi
Thu Mar 1 14:59:37 EET 2007
Thu Mar 1 14:58:23 EET 2007 Tuukka Hastrup <Tuukka.Hastrup at iki.fi>
* Use System.Glib.UTFString in Raptor instead of CString
diff -rN -u old-fenfire-hs/Raptor.chs new-fenfire-hs/Raptor.chs
--- old-fenfire-hs/Raptor.chs 2007-03-01 14:59:37.000000000 +0200
+++ new-fenfire-hs/Raptor.chs 2007-03-01 14:59:37.000000000 +0200
@@ -22,7 +22,7 @@
import Foreign (Ptr, FunPtr, Storable(pokeByteOff, peekByteOff), allocaBytes,
nullPtr, castPtr, freeHaskellFunPtr)
-import Foreign.C (CString, castCharToCChar, withCString, peekCString, CFile,
+import Foreign.C (CString, castCharToCChar, CFile,
CSize, CInt, CUChar, CChar)
import System.Posix.IO (stdOutput)
@@ -33,6 +33,8 @@
import Data.IORef (IORef, modifyIORef, readIORef, newIORef)
import Control.Exception (bracket)
+import System.Glib.UTFString (withUTFString, peekUTFString)
+
#include <raptor.h>
-- the following three helpers are copied from C2HS.hs:
@@ -83,11 +85,11 @@
f (castPtr value') (cToEnum format')
where f v IDENTIFIER_TYPE_RESOURCE = do
cstr <- {#call uri_as_string#} (castPtr v)
- str <- peekCString (castPtr cstr)
+ str <- peekUTFString (castPtr cstr)
return $ Uri str
f v IDENTIFIER_TYPE_PREDICATE = f v IDENTIFIER_TYPE_RESOURCE
- f v IDENTIFIER_TYPE_LITERAL = peekCString v >>= return . Literal
- f v IDENTIFIER_TYPE_ANONYMOUS = peekCString v >>= return . Blank
+ f v IDENTIFIER_TYPE_LITERAL = peekUTFString v >>= return . Literal
+ f v IDENTIFIER_TYPE_ANONYMOUS = peekUTFString v >>= return . Blank
f _ i = error $ "Raptor.mkIdentifier: Deprecated type: " ++ show i
getSubject :: Statement -> IO Identifier
@@ -105,14 +107,14 @@
getNamespace :: Namespace -> IO (String, String)
getNamespace ns = do
prefixC <- {#call raptor_namespace_get_prefix#} ns
- prefixS <- peekCString (castPtr prefixC)
+ prefixS <- peekUTFString (castPtr prefixC)
uri <- {#call raptor_namespace_get_uri#} ns
uriC <- {#call uri_as_string#} (castPtr uri)
- uriS <- peekCString (castPtr uriC)
+ uriS <- peekUTFString (castPtr uriC)
return (prefixS, uriS)
withURI :: String -> (Ptr URI -> IO a) -> IO a
-withURI string = bracket (withCString string $ {# call new_uri #} . castPtr)
+withURI string = bracket (withUTFString string $ {# call new_uri #} . castPtr)
{# call free_uri #}
withIdentifier :: (Ptr Statement -> Ptr () -> IO ()) ->
@@ -125,7 +127,7 @@
io
withIdentifier setValue setFormat (Statement t) (Literal s) io = do
setFormat t (cFromEnum IDENTIFIER_TYPE_LITERAL)
- withCString s $ \str -> do
+ withUTFString s $ \str -> do
setValue t (castPtr str)
io
withIdentifier _ _ _ i _ =
@@ -172,13 +174,13 @@
triplesToFilename triples namespaces filename = do
initRaptor
- serializer <- withCString "turtle" {# call new_serializer #}
+ serializer <- withUTFString "turtle" {# call new_serializer #}
when (unSerializer serializer == nullPtr) $ fail "serializer is null"
- withCString filename $ {# call serialize_start_to_filename #} serializer
+ withUTFString filename $ {# call serialize_start_to_filename #} serializer
flip mapM_ namespaces $ \(prefixS, uriS) -> do
- withCString prefixS $ \prefixC -> withCString uriS $ \uriC -> do
+ withUTFString prefixS $ \prefixC -> withUTFString uriS $ \uriC -> do
uri <- new_uri uriC
{# call raptor_serialize_set_namespace #} serializer uri $ castPtr prefixC
{# call free_uri #} uri
@@ -196,8 +198,8 @@
filenameToURI :: String -> IO String
filenameToURI filename = do
- uri_str <- withCString filename uri_filename_to_uri_string
- r <- peekCString uri_str
+ uri_str <- withUTFString filename uri_filename_to_uri_string
+ r <- peekUTFString uri_str
{# call free_memory #} (castPtr uri_str)
return r
@@ -214,9 +216,9 @@
initRaptor
- uri_str <- withCString filename uri_filename_to_uri_string
+ uri_str <- withUTFString filename uri_filename_to_uri_string
uri <- new_uri uri_str
- base_uri <- maybe (uri_copy uri) (\s -> withCString s new_uri) baseURI
+ base_uri <- maybe (uri_copy uri) (\s -> withUTFString s new_uri) baseURI
result <- parse parse_file parsertype uri base_uri
@@ -231,8 +233,8 @@
uriToTriples uri baseURI = do
initRaptor
- uri' <- withCString uri new_uri
- base_uri <- maybe (uri_copy uri') (\s -> withCString s new_uri) baseURI
+ uri' <- withUTFString uri new_uri
+ base_uri <- maybe (uri_copy uri') (\s -> withUTFString s new_uri) baseURI
result <- parse parse_uri "guess" uri' base_uri
@@ -248,7 +250,7 @@
triples <- newIORef []
namespaces <- newIORef []
- rdf_parser <- withCString parsertype new_parser
+ rdf_parser <- withUTFString parsertype new_parser
when (rdf_parser == nullPtr) $ fail "parser is null"
handler <- mkHandler $ \_user_data triple -> do
s <- getSubject triple
@@ -279,13 +281,13 @@
filenameToStdout :: String -> IO ()
filenameToStdout filename = do
- outfile <- withCString "w" $ fdopen stdOutput
+ outfile <- withUTFString "w" $ fdopen stdOutput
initRaptor
- rdf_parser <- withCString "guess" new_parser
+ rdf_parser <- withUTFString "guess" new_parser
when (rdf_parser == nullPtr) $ fail "parser is null"
mkHandler (print_triple outfile) >>= set_statement_handler rdf_parser nullPtr
- uri <- withCString filename uri_filename_to_uri_string >>= new_uri
+ uri <- withUTFString filename uri_filename_to_uri_string >>= new_uri
base_uri <- uri_copy uri
parse_file rdf_parser uri base_uri
return ()
More information about the Fencommits
mailing list