ref: 7f3da47a8e1a1e6c6f9d63946ad84ed589310a17
parent: cfd47722e3147d6ac70239ac5209947a12cd21a5
author: Lennart Augustsson <lennart@augustsson.net>
date: Tue Jan 14 05:48:55 EST 2025
More foreign string functions.
--- a/lib/Foreign/C/String.hs
+++ b/lib/Foreign/C/String.hs
@@ -2,8 +2,10 @@
CString, CStringLen,
newCAString, newCAStringLen,
peekCAString, peekCAStringLen,
- withCAString,
- peekCString,
+ withCAString, withCAStringLen,
+ newCString, newCStringLen,
+ peekCString, peekCStringLen,
+ withCString, withCStringLen,
) where
import Prelude() -- do not import Prelude
import Primitives
@@ -27,6 +29,13 @@
free cs `primThen`
primReturn a
+withCAStringLen :: forall a . String -> (CStringLen -> IO a) -> IO a
+withCAStringLen s io =
+ newCAStringLen s `primBind` \ cs@(p, _) ->
+ io cs `primBind` \ a ->
+ free p `primThen`
+ primReturn a
+
peekCAString :: CString -> IO String
peekCAString = primPeekCAString
@@ -33,7 +42,23 @@
peekCAStringLen :: CStringLen -> IO String
peekCAStringLen (p, i) = primPeekCAStringLen p i
--- Not quite right
+------------------------------------------------------
+-- XXX: No encoding!
+
+newCString :: String -> IO CString
+newCString = newCAString
+
+newCStringLen :: String -> IO CStringLen
+newCStringLen = newCAStringLen
+
+withCString :: forall a . String -> (CString -> IO a) -> IO a
+withCString = withCAString
+
+withCStringLen :: forall a . String -> (CStringLen -> IO a) -> IO a
+withCStringLen = withCAStringLen
+
peekCString :: CString -> IO String
-peekCString = primPeekCAString
+peekCString = peekCAString
+peekCStringLen :: CStringLen -> IO String
+peekCStringLen = peekCAStringLen