Process the file in binary mode so we pass though UTF-8 (#3837)
authorSimon Marlow <marlowsd@gmail.com>
Fri, 19 Mar 2010 21:56:57 +0000 (21:56 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Fri, 19 Mar 2010 21:56:57 +0000 (21:56 +0000)
Maybe strictly speaking it would be better to encode/decode UTF-8, but
it would be a fiddle and I don't think it really matters for hsc2hs.

Main.hs

diff --git a/Main.hs b/Main.hs
index 68077cc..8d18843 100644 (file)
--- a/Main.hs
+++ b/Main.hs
@@ -27,11 +27,10 @@ import Foreign.C.String
 import System.Directory         ( removeFile, doesFileExist, findExecutable )
 import System.Environment       ( getProgName, getArgs )
 import System.Exit              ( ExitCode(..), exitWith )
-import System.IO                ( hPutStr, hPutStrLn, stderr )
+import System.IO
 
 #if __GLASGOW_HASKELL__ >= 604
 import System.Process           ( runProcess, waitForProcess )
-import System.IO                ( openFile, IOMode(..), hClose )
 #define HAVE_runProcess
 #endif
 
@@ -193,7 +192,8 @@ die s = hPutStr stderr s >> exitWith (ExitFailure 1)
 processFile :: [Flag] -> String -> IO ()
 processFile flags name
   = do let file_name = dosifyPath name
-       s <- readFile file_name
+       h <- openBinaryFile file_name ReadMode
+       s <- hGetContents h
        case parser of
           Parser p -> case p (SourcePos file_name 1) s of
               Success _ _ _ toks -> output flags file_name toks