diff options
Diffstat (limited to 'main/musl/0011-add-support-for-non-option-arguments-extension-to-ge.patch')
-rw-r--r-- | main/musl/0011-add-support-for-non-option-arguments-extension-to-ge.patch | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/main/musl/0011-add-support-for-non-option-arguments-extension-to-ge.patch b/main/musl/0011-add-support-for-non-option-arguments-extension-to-ge.patch new file mode 100644 index 0000000000..7bf8e75e85 --- /dev/null +++ b/main/musl/0011-add-support-for-non-option-arguments-extension-to-ge.patch @@ -0,0 +1,71 @@ +From b72cd07f176b876aa51864d93aa8101477b1d732 Mon Sep 17 00:00:00 2001 +From: Gianluca Anzolin <gianluca@sottospazio.it> +Date: Tue, 25 Nov 2014 08:56:03 +0100 +Subject: [PATCH] add support for non-option arguments extension to getopt + +this is a GNU extension, activated by including '-' as the first +character of the options string, whereby non-option arguments are +processed as if they were arguments to an option character '\1' rather +than ending option processing. +--- + src/misc/getopt.c | 17 ++++++++++++++++- + src/misc/getopt_long.c | 7 ++++--- + 2 files changed, 20 insertions(+), 4 deletions(-) + +diff --git a/src/misc/getopt.c b/src/misc/getopt.c +index f94c4f7..a698c8d 100644 +--- a/src/misc/getopt.c ++++ b/src/misc/getopt.c +@@ -24,8 +24,20 @@ int getopt(int argc, char * const argv[], const char *optstring) + optind = 1; + } + +- if (optind >= argc || !argv[optind] || argv[optind][0] != '-' || !argv[optind][1]) ++ if (optind >= argc || !argv[optind]) + return -1; ++ ++ if (argv[optind][0] != '-') { ++ if (optstring[0] == '-') { ++ optarg = argv[optind++]; ++ return 1; ++ } ++ return -1; ++ } ++ ++ if (!argv[optind][1]) ++ return -1; ++ + if (argv[optind][1] == '-' && !argv[optind][2]) + return optind++, -1; + +@@ -43,6 +55,9 @@ int getopt(int argc, char * const argv[], const char *optstring) + optpos = 0; + } + ++ if (optstring[0] == '-') ++ optstring++; ++ + for (i=0; (l = mbtowc(&d, optstring+i, MB_LEN_MAX)) && d!=c; i+=l>0?l:1); + + if (d != c) { +diff --git a/src/misc/getopt_long.c b/src/misc/getopt_long.c +index 4ef5a5c..3d318ce 100644 +--- a/src/misc/getopt_long.c ++++ b/src/misc/getopt_long.c +@@ -12,9 +12,10 @@ static int __getopt_long(int argc, char *const *argv, const char *optstring, con + __optpos = 0; + optind = 1; + } +- if (optind >= argc || !argv[optind] || argv[optind][0] != '-') return -1; +- if ((longonly && argv[optind][1]) || +- (argv[optind][1] == '-' && argv[optind][2])) ++ if (optind >= argc || !argv[optind]) return -1; ++ if (argv[optind][0] == '-' && ++ ((longonly && argv[optind][1]) || ++ (argv[optind][1] == '-' && argv[optind][2]))) + { + int i; + for (i=0; longopts[i].name; i++) { +-- +2.2.0 + |