[project @ 2003-12-17 17:15:12 by sof]
authorsof <unknown>
Wed, 17 Dec 2003 17:15:12 +0000 (17:15 +0000)
committersof <unknown>
Wed, 17 Dec 2003 17:15:12 +0000 (17:15 +0000)
merge rev. 1.13.2.1

System/Cmd.hs

index 0b093da..6fe8fa1 100644 (file)
@@ -100,6 +100,8 @@ foreign import ccall unsafe "rawSystem"
 -- a single string.  Command-line parsing is done by the executable
 -- itself.
 rawSystem cmd args = do
+       -- NOTE: 'cmd' is assumed to contain the application to run _only_,
+       -- as it'll be quoted surrounded in quotes here.
   let cmdline = translate cmd ++ concat (map ((' ':) . translate) args)
   withCString cmdline $ \pcmdline -> do
     status <- throwErrnoIfMinus1 "rawSystem" (c_rawSystem pcmdline)
@@ -108,6 +110,7 @@ rawSystem cmd args = do
        n  -> return (ExitFailure n)
 
 translate :: String -> String
+translate str@('"':_) = str -- already escaped.
 translate str = '"' : foldr escape "\"" str
   where escape '"'  str = '\\' : '"'  : str
        escape '\\' str = '\\' : '\\' : str