mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-29 07:42:23 -05:00
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;
|
||
|
}
|