summaryrefslogtreecommitdiffstats
path: root/test/run
diff options
context:
space:
mode:
authorJean Delvare <jdelvare@suse.de>2014-02-12 21:03:03 +0100
committerJean Delvare <jdelvare@suse.de>2014-02-12 21:03:03 +0100
commit172b633be53b4addf7e8784e7c28d16f369cea5f (patch)
treee88dce24ef3c0a0f185df756764bb366541d1e2d /test/run
parent826ec33980998186841451a52b721eaf0cc456c3 (diff)
downloadquilt-172b633be53b4addf7e8784e7c28d16f369cea5f.tar.gz
test/run: Use perl module Text::ParseWords
Perl has a standard module which can split shell command lines for us, so use it. Function shellwords can deal with quoted parameters too so we no longer need to pass commands to /bin/sh just because they contain quoted parameters. This lowers the ratio of commands passed to /bin/sh from 34% to 31%.
Diffstat (limited to 'test/run')
-rwxr-xr-xtest/run5
1 files changed, 3 insertions, 2 deletions
diff --git a/test/run b/test/run
index 6d06d8a..920e8bc 100755
--- a/test/run
+++ b/test/run
@@ -48,6 +48,7 @@ use strict;
use FileHandle;
use Getopt::Std;
use POSIX qw(isatty setuid getcwd);
+use Text::ParseWords;
use vars qw($opt_l $opt_q $opt_v %output);
no warnings qw(taint);
@@ -267,8 +268,8 @@ sub sg($) {
sub exec_test($$) {
my ($raw_prog, $in) = @_;
local (*IN, *IN_DUP, *IN2, *OUT_DUP, *OUT, *OUT2);
- my $prog = [ map { s/\\(.)/$1/g; $_ } split /(?<!\\)\s+/, $raw_prog ];
- my $needs_shell = ($raw_prog =~ /[][|<>;"'`\$\*\?]/);
+ my $prog = [ shellwords($raw_prog) ];
+ my $needs_shell = ($raw_prog =~ /[][|<>;`\$\*\?]/);
if ($prog->[0] eq "umask") {
umask oct $prog->[1];