aboutsummaryrefslogtreecommitdiffstats
path: root/main/musl/0020-support-abbreviated-options-in-getopt_long.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/musl/0020-support-abbreviated-options-in-getopt_long.patch')
-rw-r--r--main/musl/0020-support-abbreviated-options-in-getopt_long.patch58
1 files changed, 58 insertions, 0 deletions
diff --git a/main/musl/0020-support-abbreviated-options-in-getopt_long.patch b/main/musl/0020-support-abbreviated-options-in-getopt_long.patch
new file mode 100644
index 0000000000..6cc3d9893b
--- /dev/null
+++ b/main/musl/0020-support-abbreviated-options-in-getopt_long.patch
@@ -0,0 +1,58 @@
+From cfd7b4acd55420deedd41e0614c9b614c73c743e Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Wed, 10 Dec 2014 21:26:49 -0500
+Subject: [PATCH] support abbreviated options in getopt_long
+
+---
+ src/misc/getopt_long.c | 25 ++++++++++++++++++-------
+ 1 file changed, 18 insertions(+), 7 deletions(-)
+
+diff --git a/src/misc/getopt_long.c b/src/misc/getopt_long.c
+index 643e598..469ee92 100644
+--- a/src/misc/getopt_long.c
++++ b/src/misc/getopt_long.c
+@@ -56,23 +56,34 @@ static int __getopt_long_core(int argc, char *const *argv, const char *optstring
+ ((longonly && argv[optind][1]) ||
+ (argv[optind][1] == '-' && argv[optind][2])))
+ {
+- int i;
+- for (i=0; longopts[i].name; i++) {
++ int i, cnt, match;
++ char *opt;
++ for (cnt=i=0; longopts[i].name; i++) {
+ const char *name = longopts[i].name;
+- char *opt = argv[optind]+1;
++ opt = argv[optind]+1;
+ if (*opt == '-') opt++;
+ for (; *name && *name == *opt; name++, opt++);
+- if (*name || (*opt && *opt != '=')) continue;
++ if (*opt && *opt != '=') continue;
++ match = i;
++ if (!*name) {
++ cnt = 1;
++ break;
++ }
++ cnt++;
++ }
++ if (cnt==1) {
++ i = match;
++ optind++;
+ if (*opt == '=') {
+- if (!longopts[i].has_arg) continue;
++ if (!longopts[i].has_arg) return '?';
+ optarg = opt+1;
+ } else {
+ if (longopts[i].has_arg == required_argument) {
+- if (!(optarg = argv[++optind]))
++ if (!(optarg = argv[optind]))
+ return ':';
++ optind++;
+ } else optarg = NULL;
+ }
+- optind++;
+ if (idx) *idx = i;
+ if (longopts[i].flag) {
+ *longopts[i].flag = longopts[i].val;
+--
+2.2.0
+