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