diff options
author | Joey Hess <joeyh@joeyh.name> | 2016-11-01 14:03:55 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2016-11-01 14:03:59 -0400 |
commit | 3d3a578e2e471437f3b0c893f207e863f3749374 (patch) | |
tree | 072afbb4df63570b85bac33b9d9769ed1118eaaa /Utility | |
parent | 8d16ba5f1f241318e4a912d86cd70c3f4242a22a (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')
-rw-r--r-- | Utility/CoProcess.hs | 22 |
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 |