lib/childprocess/windows/process.rb in childprocess-0.1.9 vs lib/childprocess/windows/process.rb in childprocess-0.2.0
- old
+ new
@@ -50,20 +50,34 @@
if @io
opts[:stdout] = @io.stdout
opts[:stderr] = @io.stderr
end
- # TODO: escape/quote arguments properly
- command = @args.join ' '
-
- @pid = Lib.create_proc(command, opts)
+ @pid = Lib.create_proc(command_string, opts)
@handle = Handle.open(@pid)
if duplex?
io._stdin = opts[:stdin]
end
self
+ end
+
+ def command_string
+ @command_string ||= (
+ @args.map { |arg| quote_if_necessary(arg.to_s) }.join ' '
+ )
+ end
+
+ def quote_if_necessary(str)
+ quote = str.start_with?('"') ? "'" : '"'
+
+ case str
+ when /[\s\\'"]/
+ %{#{quote}#{str}#{quote}}
+ else
+ str
+ end
end
end # Process
end # Windows
end # ChildProcess