summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Hakyll.hs4
-rw-r--r--src/Hakyll/Core/UnixFilter.hs31
2 files changed, 8 insertions, 27 deletions
diff --git a/src/Hakyll.hs b/src/Hakyll.hs
index 90b56f9..3d7fb91 100644
--- a/src/Hakyll.hs
+++ b/src/Hakyll.hs
@@ -11,9 +11,7 @@ module Hakyll
, module Hakyll.Core.Metadata
, module Hakyll.Core.Routes
, module Hakyll.Core.Rules
-#ifdef UNIX_FILTER
, module Hakyll.Core.UnixFilter
-#endif
, module Hakyll.Core.Util.File
, module Hakyll.Core.Util.String
, module Hakyll.Core.Writable
@@ -43,9 +41,7 @@ import Hakyll.Core.Item
import Hakyll.Core.Metadata
import Hakyll.Core.Routes
import Hakyll.Core.Rules
-#ifdef UNIX_FILTER
import Hakyll.Core.UnixFilter
-#endif
import Hakyll.Core.Util.File
import Hakyll.Core.Util.String
import Hakyll.Core.Writable
diff --git a/src/Hakyll/Core/UnixFilter.hs b/src/Hakyll/Core/UnixFilter.hs
index dbc5e95..2a2f394 100644
--- a/src/Hakyll/Core/UnixFilter.hs
+++ b/src/Hakyll/Core/UnixFilter.hs
@@ -12,9 +12,7 @@ import Data.ByteString.Lazy (ByteString)
import qualified Data.ByteString.Lazy as LB
import System.IO (Handle, hClose, hGetContents, hPutStr,
hSetEncoding, localeEncoding)
-import System.Posix.IO (closeFd, createPipe, dupTo, fdToHandle,
- stdInput, stdOutput)
-import System.Posix.Process (executeFile, forkProcess)
+import System.Process
--------------------------------------------------------------------------------
@@ -89,32 +87,19 @@ unixFilterIO :: (Handle -> i -> IO ())
-> i
-> IO o
unixFilterIO writer reader programName args input = do
- -- Create pipes
- (stdinRead, stdinWrite) <- createPipe
- (stdoutRead, stdoutWrite) <- createPipe
+ let process = (proc programName args)
+ { std_in = CreatePipe
+ , std_out = CreatePipe
+ , close_fds = True
+ }
- -- Fork the child
- _ <- forkProcess $ do
- -- Copy our pipes over the regular stdin/stdout
- _ <- dupTo stdinRead stdInput
- _ <- dupTo stdoutWrite stdOutput
-
- -- Close the now unneeded file descriptors in the child
- mapM_ closeFd [stdinWrite, stdoutRead, stdinRead, stdoutWrite]
-
- -- Execute the program
- _ <- executeFile programName True args Nothing
- return ()
-
- -- On the parent side, close the client-side FDs.
- mapM_ closeFd [stdinRead, stdoutWrite]
+ (Just stdinWriteHandle, Just stdoutReadHandle, _, _) <-
+ createProcess process
-- Write the input to the child pipe
_ <- forkIO $ do
- stdinWriteHandle <- fdToHandle stdinWrite
writer stdinWriteHandle input
hClose stdinWriteHandle
-- Receive the output from the child
- stdoutReadHandle <- fdToHandle stdoutRead
reader stdoutReadHandle