| Index: fusl/src/misc/getopt_long.c
|
| diff --git a/fusl/src/misc/getopt_long.c b/fusl/src/misc/getopt_long.c
|
| index 480c00139e08682fd15d5798d871be4c85111b76..c7595bd8de42bee96a15d7b5228f4b4d38d28e27 100644
|
| --- a/fusl/src/misc/getopt_long.c
|
| +++ b/fusl/src/misc/getopt_long.c
|
| @@ -6,126 +6,146 @@
|
|
|
| extern int __optpos, __optreset;
|
|
|
| -static void permute(char *const *argv, int dest, int src)
|
| -{
|
| - char **av = (char **)argv;
|
| - char *tmp = av[src];
|
| - int i;
|
| - for (i=src; i>dest; i--)
|
| - av[i] = av[i-1];
|
| - av[dest] = tmp;
|
| +static void permute(char* const* argv, int dest, int src) {
|
| + char** av = (char**)argv;
|
| + char* tmp = av[src];
|
| + int i;
|
| + for (i = src; i > dest; i--)
|
| + av[i] = av[i - 1];
|
| + av[dest] = tmp;
|
| }
|
|
|
| -void __getopt_msg(const char *, const char *, const char *, size_t);
|
| +void __getopt_msg(const char*, const char*, const char*, size_t);
|
|
|
| -static int __getopt_long_core(int argc, char *const *argv, const char *optstring, const struct option *longopts, int *idx, int longonly);
|
| +static int __getopt_long_core(int argc,
|
| + char* const* argv,
|
| + const char* optstring,
|
| + const struct option* longopts,
|
| + int* idx,
|
| + int longonly);
|
|
|
| -static int __getopt_long(int argc, char *const *argv, const char *optstring, const struct option *longopts, int *idx, int longonly)
|
| -{
|
| - int ret, skipped, resumed;
|
| - if (!optind || __optreset) {
|
| - __optreset = 0;
|
| - __optpos = 0;
|
| - optind = 1;
|
| - }
|
| - if (optind >= argc || !argv[optind]) return -1;
|
| - skipped = optind;
|
| - if (optstring[0] != '+' && optstring[0] != '-') {
|
| - int i;
|
| - for (i=optind; ; i++) {
|
| - if (i >= argc || !argv[i]) return -1;
|
| - if (argv[i][0] == '-' && argv[i][1]) break;
|
| - }
|
| - optind = i;
|
| - }
|
| - resumed = optind;
|
| - ret = __getopt_long_core(argc, argv, optstring, longopts, idx, longonly);
|
| - if (resumed > skipped) {
|
| - int i, cnt = optind-resumed;
|
| - for (i=0; i<cnt; i++)
|
| - permute(argv, skipped, optind-1);
|
| - optind = skipped + cnt;
|
| - }
|
| - return ret;
|
| +static int __getopt_long(int argc,
|
| + char* const* argv,
|
| + const char* optstring,
|
| + const struct option* longopts,
|
| + int* idx,
|
| + int longonly) {
|
| + int ret, skipped, resumed;
|
| + if (!optind || __optreset) {
|
| + __optreset = 0;
|
| + __optpos = 0;
|
| + optind = 1;
|
| + }
|
| + if (optind >= argc || !argv[optind])
|
| + return -1;
|
| + skipped = optind;
|
| + if (optstring[0] != '+' && optstring[0] != '-') {
|
| + int i;
|
| + for (i = optind;; i++) {
|
| + if (i >= argc || !argv[i])
|
| + return -1;
|
| + if (argv[i][0] == '-' && argv[i][1])
|
| + break;
|
| + }
|
| + optind = i;
|
| + }
|
| + resumed = optind;
|
| + ret = __getopt_long_core(argc, argv, optstring, longopts, idx, longonly);
|
| + if (resumed > skipped) {
|
| + int i, cnt = optind - resumed;
|
| + for (i = 0; i < cnt; i++)
|
| + permute(argv, skipped, optind - 1);
|
| + optind = skipped + cnt;
|
| + }
|
| + return ret;
|
| }
|
|
|
| -static int __getopt_long_core(int argc, char *const *argv, const char *optstring, const struct option *longopts, int *idx, int longonly)
|
| -{
|
| - optarg = 0;
|
| - if (longopts && argv[optind][0] == '-' &&
|
| - ((longonly && argv[optind][1]) ||
|
| - (argv[optind][1] == '-' && argv[optind][2])))
|
| - {
|
| - int colon = optstring[optstring[0]=='+'||optstring[0]=='-']==':';
|
| - int i, cnt, match;
|
| - char *opt;
|
| - for (cnt=i=0; longopts[i].name; i++) {
|
| - const char *name = longopts[i].name;
|
| - opt = argv[optind]+1;
|
| - if (*opt == '-') opt++;
|
| - for (; *name && *name == *opt; name++, opt++);
|
| - if (*opt && *opt != '=') continue;
|
| - match = i;
|
| - if (!*name) {
|
| - cnt = 1;
|
| - break;
|
| - }
|
| - cnt++;
|
| - }
|
| - if (cnt==1) {
|
| - i = match;
|
| - optind++;
|
| - optopt = longopts[i].val;
|
| - if (*opt == '=') {
|
| - if (!longopts[i].has_arg) {
|
| - if (colon || !opterr)
|
| - return '?';
|
| - __getopt_msg(argv[0],
|
| - ": option does not take an argument: ",
|
| - longopts[i].name,
|
| - strlen(longopts[i].name));
|
| - return '?';
|
| - }
|
| - optarg = opt+1;
|
| - } else if (longopts[i].has_arg == required_argument) {
|
| - if (!(optarg = argv[optind])) {
|
| - if (colon) return ':';
|
| - if (!opterr) return '?';
|
| - __getopt_msg(argv[0],
|
| - ": option requires an argument: ",
|
| - longopts[i].name,
|
| - strlen(longopts[i].name));
|
| - return '?';
|
| - }
|
| - optind++;
|
| - }
|
| - if (idx) *idx = i;
|
| - if (longopts[i].flag) {
|
| - *longopts[i].flag = longopts[i].val;
|
| - return 0;
|
| - }
|
| - return longopts[i].val;
|
| - }
|
| - if (argv[optind][1] == '-') {
|
| - if (!colon && opterr)
|
| - __getopt_msg(argv[0], cnt ?
|
| - ": option is ambiguous: " :
|
| - ": unrecognized option: ",
|
| - argv[optind]+2,
|
| - strlen(argv[optind]+2));
|
| - optind++;
|
| - return '?';
|
| - }
|
| - }
|
| - return getopt(argc, argv, optstring);
|
| +static int __getopt_long_core(int argc,
|
| + char* const* argv,
|
| + const char* optstring,
|
| + const struct option* longopts,
|
| + int* idx,
|
| + int longonly) {
|
| + optarg = 0;
|
| + if (longopts && argv[optind][0] == '-' &&
|
| + ((longonly && argv[optind][1]) ||
|
| + (argv[optind][1] == '-' && argv[optind][2]))) {
|
| + int colon = optstring[optstring[0] == '+' || optstring[0] == '-'] == ':';
|
| + int i, cnt, match;
|
| + char* opt;
|
| + for (cnt = i = 0; longopts[i].name; i++) {
|
| + const char* name = longopts[i].name;
|
| + opt = argv[optind] + 1;
|
| + if (*opt == '-')
|
| + opt++;
|
| + for (; *name && *name == *opt; name++, opt++)
|
| + ;
|
| + if (*opt && *opt != '=')
|
| + continue;
|
| + match = i;
|
| + if (!*name) {
|
| + cnt = 1;
|
| + break;
|
| + }
|
| + cnt++;
|
| + }
|
| + if (cnt == 1) {
|
| + i = match;
|
| + optind++;
|
| + optopt = longopts[i].val;
|
| + if (*opt == '=') {
|
| + if (!longopts[i].has_arg) {
|
| + if (colon || !opterr)
|
| + return '?';
|
| + __getopt_msg(argv[0], ": option does not take an argument: ",
|
| + longopts[i].name, strlen(longopts[i].name));
|
| + return '?';
|
| + }
|
| + optarg = opt + 1;
|
| + } else if (longopts[i].has_arg == required_argument) {
|
| + if (!(optarg = argv[optind])) {
|
| + if (colon)
|
| + return ':';
|
| + if (!opterr)
|
| + return '?';
|
| + __getopt_msg(argv[0], ": option requires an argument: ",
|
| + longopts[i].name, strlen(longopts[i].name));
|
| + return '?';
|
| + }
|
| + optind++;
|
| + }
|
| + if (idx)
|
| + *idx = i;
|
| + if (longopts[i].flag) {
|
| + *longopts[i].flag = longopts[i].val;
|
| + return 0;
|
| + }
|
| + return longopts[i].val;
|
| + }
|
| + if (argv[optind][1] == '-') {
|
| + if (!colon && opterr)
|
| + __getopt_msg(argv[0], cnt ? ": option is ambiguous: "
|
| + : ": unrecognized option: ",
|
| + argv[optind] + 2, strlen(argv[optind] + 2));
|
| + optind++;
|
| + return '?';
|
| + }
|
| + }
|
| + return getopt(argc, argv, optstring);
|
| }
|
|
|
| -int getopt_long(int argc, char *const *argv, const char *optstring, const struct option *longopts, int *idx)
|
| -{
|
| - return __getopt_long(argc, argv, optstring, longopts, idx, 0);
|
| +int getopt_long(int argc,
|
| + char* const* argv,
|
| + const char* optstring,
|
| + const struct option* longopts,
|
| + int* idx) {
|
| + return __getopt_long(argc, argv, optstring, longopts, idx, 0);
|
| }
|
|
|
| -int getopt_long_only(int argc, char *const *argv, const char *optstring, const struct option *longopts, int *idx)
|
| -{
|
| - return __getopt_long(argc, argv, optstring, longopts, idx, 1);
|
| +int getopt_long_only(int argc,
|
| + char* const* argv,
|
| + const char* optstring,
|
| + const struct option* longopts,
|
| + int* idx) {
|
| + return __getopt_long(argc, argv, optstring, longopts, idx, 1);
|
| }
|
|
|