-- value -1, which is a possible return value from iconv_open.
type IConv = CLong -- ToDo: (#type iconv_t)
-foreign import ccall unsafe "iconv_open"
- iconv_open :: CString -> CString -> IO IConv
+foreign import ccall unsafe "hs_iconv_open"
+ hs_iconv_open :: CString -> CString -> IO IConv
-foreign import ccall unsafe "iconv_close"
- iconv_close :: IConv -> IO CInt
+foreign import ccall unsafe "hs_iconv_close"
+ hs_iconv_close :: IConv -> IO CInt
-foreign import ccall unsafe "iconv"
- iconv :: IConv -> Ptr CString -> Ptr CSize -> Ptr CString -> Ptr CSize
+foreign import ccall unsafe "hs_iconv"
+ hs_iconv :: IConv -> Ptr CString -> Ptr CSize -> Ptr CString -> Ptr CSize
-> IO CSize
foreign import ccall unsafe "localeEncoding"
newIConv from to fn =
withCString from $ \ from_str ->
withCString to $ \ to_str -> do
- iconvt <- throwErrnoIfMinus1 "mkTextEncoding" $ iconv_open to_str from_str
- let iclose = do throwErrnoIfMinus1 "Iconv.close" $ iconv_close iconvt
+ iconvt <- throwErrnoIfMinus1 "mkTextEncoding" $ hs_iconv_open to_str from_str
+ let iclose = do throwErrnoIfMinus1 "Iconv.close" $ hs_iconv_close iconvt
return ()
return BufferCodec{
encode = fn iconvt,
with (poraw `plusPtr` (ow `shiftL` oscale)) $ \ p_outbuf -> do
with (fromIntegral ((iw-ir) `shiftL` iscale)) $ \ p_inleft -> do
with (fromIntegral ((os-ow) `shiftL` oscale)) $ \ p_outleft -> do
- res <- iconv iconv_t p_inbuf p_inleft p_outbuf p_outleft
+ res <- hs_iconv iconv_t p_inbuf p_inleft p_outbuf p_outleft
new_inleft <- peek p_inleft
new_outleft <- peek p_outleft
let
--- /dev/null
+#ifndef __MINGW32__
+
+#include <stdlib.h>
+#include <iconv.h>
+
+iconv_t hs_iconv_open(const char* tocode,
+ const char* fromcode)
+{
+ return iconv_open(tocode, fromcode);
+}
+
+size_t hs_iconv(iconv_t cd,
+ const char* * inbuf, size_t * inbytesleft,
+ char* * outbuf, size_t * outbytesleft)
+{
+ return iconv(cd, inbuf, inbytesleft, outbuf, outbytesleft);
+}
+
+int hs_iconv_close(iconv_t cd) {
+ return iconv_close(cd);
+}
+
+#endif