Skip to content

Commit 0a92dfa

Browse files
committed
Fix haskell#96 Write files with utf8 encoding, not, effectively, char8
1 parent 2d6e7a3 commit 0a92dfa

File tree

4 files changed

+11
-9
lines changed

4 files changed

+11
-9
lines changed

src/Common.hs

+4-2
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,10 @@ default_compiler = "cc"
3030
------------------------------------------------------------------------
3131
-- Write the output files.
3232

33-
writeBinaryFile :: FilePath -> String -> IO ()
34-
writeBinaryFile fp str = withBinaryFile fp WriteMode $ \h -> hPutStr h str
33+
writeUtf8File :: FilePath -> String -> IO ()
34+
writeUtf8File fp str = withBinaryFile fp WriteMode $ \h -> do
35+
hSetEncoding h utf8
36+
hPutStr h str
3537

3638
rawSystemL :: FilePath -> FilePath -> String -> Bool -> FilePath -> [String] -> IO ()
3739
rawSystemL outDir outBase action flg prog args = withResponseFile outDir outBase args $ \rspFile -> do

src/CrossCodegen.hs

+3-3
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ checkValidity input = do
275275
concatMap (uncurry (outValidityCheck (cViaAsm config))) (zip input [0..])
276276
testLog ("checking for compilation errors") $ do
277277
success <- makeTest2 (".c",".o") $ \(cFile,oFile) -> do
278-
liftTestIO $ writeBinaryFile cFile test
278+
liftTestIO $ writeUtf8File cFile test
279279
compiler <- testGetCompiler
280280
runCompiler compiler
281281
(["-S" | cViaAsm config ]++
@@ -619,7 +619,7 @@ runCompileAsmIntegerTest _ = error "runCompileAsmIntegerTestargument isn't a Spe
619619
runCompileExtract :: String -> String -> TestMonad Integer
620620
runCompileExtract k testStr = do
621621
makeTest3 (".c", ".s", ".txt") $ \(cFile, sFile, stdout) -> do
622-
liftTestIO $ writeBinaryFile cFile testStr
622+
liftTestIO $ writeUtf8File cFile testStr
623623
flags <- testGetFlags
624624
compiler <- testGetCompiler
625625
_ <- runCompiler compiler
@@ -631,7 +631,7 @@ runCompileExtract k testStr = do
631631
runCompileTest :: String -> TestMonad Bool
632632
runCompileTest testStr = do
633633
makeTest3 (".c", ".o",".txt") $ \(cFile,oFile,stdout) -> do
634-
liftTestIO $ writeBinaryFile cFile testStr
634+
liftTestIO $ writeUtf8File cFile testStr
635635
flags <- testGetFlags
636636
compiler <- testGetCompiler
637637
runCompiler compiler

src/DirectCodegen.hs

+3-3
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ outputDirect config outName outDir outBase name toks = do
6666
"if","ifdef","ifndef", "elif","else","endif"]) $
6767
die (file ++ ":" ++ show line ++ " directive \"" ++ key ++ "\" is not safe for cross-compilation"))
6868

69-
writeBinaryFile cProgName $
69+
writeUtf8File cProgName $
7070
outTemplateHeaderCProg (cTemplate config)++
7171
concatMap outFlagHeaderCProg flags++
7272
concatMap outHeaderCProg specials++
@@ -99,7 +99,7 @@ outputDirect config outName outDir outBase name toks = do
9999
rawSystemWithStdOutL outDir outBase ("running " ++ execProgName) beVerbose execProgName [] outName
100100
possiblyRemove progName $ do
101101

102-
when needsH $ writeBinaryFile outHName $
102+
when needsH $ writeUtf8File outHName $
103103
"#ifndef "++includeGuard++"\n" ++
104104
"#define "++includeGuard++"\n" ++
105105
"#include <HsFFI.h>\n" ++
@@ -111,7 +111,7 @@ outputDirect config outName outDir outBase name toks = do
111111
concatMap outTokenH specials++
112112
"#endif\n"
113113

114-
when needsC $ writeBinaryFile outCName $
114+
when needsC $ writeUtf8File outCName $
115115
"#include \""++outHFile++"\"\n"++
116116
concatMap outTokenC specials
117117
-- NB. outHFile not outHName; works better when processed

src/UtilsCodegen.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ withUtilsObject config outDir outBase f = do
2727
oUtilsName = outDir ++ outBase ++ "_hsc_utils.o"
2828

2929
possiblyRemove cUtilsName $ do
30-
writeBinaryFile cUtilsName $ unlines $
30+
writeUtf8File cUtilsName $ unlines $
3131
-- These header will cause a mismatch with any mingw-w64 header by
3232
-- including system headers before user headers in the hsc file.
3333
-- We *MUST* include user headers *BEFORE* automatic ones. */

0 commit comments

Comments
 (0)