aboutsummaryrefslogtreecommitdiff
path: root/Utility/CoProcess.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2016-11-01 14:03:55 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2016-11-01 14:03:59 -0400
commit3d3a578e2e471437f3b0c893f207e863f3749374 (patch)
tree072afbb4df63570b85bac33b9d9769ed1118eaaa /Utility/CoProcess.hs
parent8d16ba5f1f241318e4a912d86cd70c3f4242a22a (diff)
restart coprocess in raw mode
Restarting a crashing git process could result in filename encoding issues when not in a unicode locale, as the restarted processes's handles were not read in raw mode. Since rawMode is always used when starting a coprocess, didn't bother to parameterise it and just always enable it for simplicity. This commit was sponsored by Jake Vosloo on Patreon.
Diffstat (limited to 'Utility/CoProcess.hs')
-rw-r--r--Utility/CoProcess.hs22
1 files changed, 8 insertions, 14 deletions
diff --git a/Utility/CoProcess.hs b/Utility/CoProcess.hs
index 9854b47fc..94d5ac3bc 100644
--- a/Utility/CoProcess.hs
+++ b/Utility/CoProcess.hs
@@ -13,7 +13,6 @@ module Utility.CoProcess (
start,
stop,
query,
- rawMode
) where
import Common
@@ -44,7 +43,15 @@ start numrestarts cmd params environ = do
start' :: CoProcessSpec -> IO CoProcessState
start' s = do
(pid, from, to) <- startInteractiveProcess (coProcessCmd s) (coProcessParams s) (coProcessEnv s)
+ rawMode from
+ rawMode to
return $ CoProcessState pid to from s
+ where
+ rawMode h = do
+ fileEncoding h
+#ifdef mingw32_HOST_OS
+ hSetNewlineMode h noNewlineTranslation
+#endif
stop :: CoProcessHandle -> IO ()
stop ch = do
@@ -79,16 +86,3 @@ query ch send receive = do
{ coProcessNumRestarts = coProcessNumRestarts (coProcessSpec s) - 1 }
putMVar ch s'
query ch send receive
-
-rawMode :: CoProcessHandle -> IO CoProcessHandle
-rawMode ch = do
- s <- readMVar ch
- raw $ coProcessFrom s
- raw $ coProcessTo s
- return ch
- where
- raw h = do
- fileEncoding h
-#ifdef mingw32_HOST_OS
- hSetNewlineMode h noNewlineTranslation
-#endif