From f04b6face45199ef083a9fb4d5c6a2014b6fdc2d Mon Sep 17 00:00:00 2001 From: Heng Li Date: Wed, 29 Aug 2018 20:50:53 -1000 Subject: [PATCH] remember longidx --- ketopt.c | 4 ++-- ketopt.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ketopt.c b/ketopt.c index aa6685c..55d086c 100644 --- a/ketopt.c +++ b/ketopt.c @@ -20,7 +20,7 @@ int ketopt(ketopt_t *s, int argc, char *argv[], int permute, const char *ostr, c while (s->i < argc && (argv[s->i][0] != '-' || argv[s->i][1] == '\0')) ++s->i, ++s->n_args; } - s->arg = 0, i0 = s->i; + s->arg = 0, s->longidx = -1, i0 = s->i; if (s->i >= argc || argv[s->i][0] != '-' || argv[s->i][1] == '\0') { s->ind = s->i - s->n_args; return -1; @@ -40,7 +40,7 @@ int ketopt(ketopt_t *s, int argc, char *argv[], int permute, const char *ostr, c if (strncmp(&argv[s->i][2], longopts[k].name, j - 2) == 0) ++n_matches, o = &longopts[k]; if (n_matches == 1) { - s->opt = opt = o->val; + s->opt = opt = o->val, s->longidx = o - longopts; if (argv[s->i][j] == '=') s->arg = &argv[s->i][j + 1]; if (o->has_arg == 1 && argv[s->i][j] == '\0') { if (s->i < argc - 1) s->arg = argv[++s->i]; diff --git a/ketopt.h b/ketopt.h index 786e17e..eb8b60b 100644 --- a/ketopt.h +++ b/ketopt.h @@ -9,6 +9,7 @@ typedef struct { int ind; /* equivalent to optind */ int opt; /* equivalent to optopt */ char *arg; /* equivalent to optarg */ + int longidx; /* index of a long option; or -1 if short */ /* private variables not intended for external uses */ int i, pos, n_args; } ketopt_t; -- 2.47.3