write the output file in binary mode (#3837)
authorSimon Marlow <marlowsd@gmail.com>
Wed, 22 Dec 2010 09:14:55 +0000 (09:14 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Wed, 22 Dec 2010 09:14:55 +0000 (09:14 +0000)
Main.hs

diff --git a/Main.hs b/Main.hs
index 2772c2e..d779458 100644 (file)
--- a/Main.hs
+++ b/Main.hs
@@ -600,7 +600,7 @@ output mb_libdir flags name toks = do
         []  -> return compiler
         ls  -> return (last ls)
 
-    writeFile cProgName $
+    writeBinaryFile cProgName $
         concatMap outFlagHeaderCProg flags++
         concatMap outHeaderCProg specials++
         "\nint main (int argc, char *argv [])\n{\n"++
@@ -632,7 +632,7 @@ output mb_libdir flags name toks = do
         rawSystemWithStdOutL ("running " ++ execProgName) beVerbose execProgName [] outName
         finallyRemove progName $ do
 
-          when needsH $ writeFile outHName $
+          when needsH $ writeBinaryFile outHName $
             "#ifndef "++includeGuard++"\n" ++
             "#define "++includeGuard++"\n" ++
             "#if __GLASGOW_HASKELL__ && __GLASGOW_HASKELL__ < 409\n" ++
@@ -647,12 +647,15 @@ output mb_libdir flags name toks = do
             concatMap outTokenH specials++
             "#endif\n"
 
-          when needsC $ writeFile outCName $
+          when needsC $ writeBinaryFile outCName $
             "#include \""++outHFile++"\"\n"++
             concatMap outTokenC specials
             -- NB. outHFile not outHName; works better when processed
             -- by gcc or mkdependC.
 
+writeBinaryFile :: FilePath -> String -> IO ()
+writeBinaryFile fp str = withBinaryFile fp WriteMode $ \h -> hPutStr h str
+
 rawSystemL :: String -> Bool -> FilePath -> [String] -> IO ()
 rawSystemL action flg prog args = do
   let cmdLine = prog++" "++unwords args