* gnu/packages/patches/quilt-compat-getopt-fix-second-separator.patch, gnu/packages/patches/quilt-compat-getopt-fix-option-with-nondigit-param.patch: New files. * gnu/local.mk (dist_patch_DATA): Add them. * gnu/packages/patchutils.scm (quilt)[source]: Use them. [arguments]: Remove workarounds in 'patch-tests' phase.
59 lines
1.6 KiB
Diff
59 lines
1.6 KiB
Diff
From: Jean Delvare <jdelvare@suse.de>
|
|
Subject: compat/getopt: Handle a second separator
|
|
|
|
getopt can be passed 2 '--' separators. The first one tells that
|
|
getopt options are over and target program options start. The second
|
|
one tells that the target program's options are over and following
|
|
arguments should be treated as non-options even if they look like
|
|
options.
|
|
|
|
This second separator was not handled, causing the compatibility
|
|
getopt script to treat the following arguments as options, eventually
|
|
failing one way or another.
|
|
|
|
Properly detect and handle the second separator. This fixes the first
|
|
half of bug #54772:
|
|
https://savannah.nongnu.org/bugs/index.php?54772
|
|
|
|
Signed-off-by: Jean Delvare <jdelvare@suse.de>
|
|
---
|
|
compat/getopt.in | 13 ++++++++++---
|
|
1 file changed, 10 insertions(+), 3 deletions(-)
|
|
|
|
--- quilt.orig/compat/getopt.in 2018-10-03 15:23:21.147620172 +0200
|
|
+++ quilt/compat/getopt.in 2018-10-03 16:05:56.818667040 +0200
|
|
@@ -8,12 +8,12 @@
|
|
|
|
use strict;
|
|
|
|
-my $opts;
|
|
+my $opts = '';
|
|
my @words;
|
|
my $found_sep = 0;
|
|
|
|
foreach my $arg (@ARGV) {
|
|
- if ($arg eq '--') {
|
|
+ if (!$found_sep && $arg eq '--') {
|
|
$found_sep = 1;
|
|
}
|
|
else {
|
|
@@ -62,10 +62,17 @@ sub quote_word
|
|
return "'$word'";
|
|
}
|
|
|
|
+# there can be a second separator, to inhibit processing following arguments
|
|
+# as options
|
|
+$found_sep = 0;
|
|
foreach my $word (@words) {
|
|
+ if ($word eq '--') {
|
|
+ $found_sep = 1;
|
|
+ next;
|
|
+ }
|
|
|
|
# allow '-' to be an option value
|
|
- if (!$need_param && $word !~ /^-./) {
|
|
+ if ($found_sep || (!$need_param && $word !~ /^-./)) {
|
|
push @barewords, quote_word($word);
|
|
next;
|
|
}
|