openal-ffi-0.0.1: src/Sound/OpenAL/FFI/Utils.hs
module Sound.OpenAL.FFI.Utils
( Dynamic
, peekCStrings
) where
import Foreign (FunPtr, lengthArray0, plusPtr)
import Foreign.C.String (CString, peekCAString)
type Dynamic a = FunPtr a -> a
peekCStrings :: CString -> IO [String]
peekCStrings = go []
where
go acc ptr = do
str <- peekCAString ptr
if null str then
pure $ reverse acc
else do
len <- lengthArray0 0 ptr
go (str : acc) $ plusPtr ptr (len + 1)