[PATCH v4 02/18] parse-options: add two helper functions
1. parse_options_current: get the current option/argument the API
is dealing with;
2. parse_options_next: make the API to deal with the next
option/argument.
Signed-off-by: Bo Yang <struggleyb.nku@gmail.com>
---
parse-options.c | 19 +++++++++++++++++++
parse-options.h | 4 ++++
2 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/parse-options.c b/parse-options.c
index cbb49d3..e0c3641 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -439,6 +439,25 @@ unknown:
return PARSE_OPT_DONE;
}
+const char *parse_options_current(struct parse_opt_ctx_t *ctx)
+{
+ return ctx->argv[0];
+}
+
+int parse_options_next(struct parse_opt_ctx_t *ctx, int keep)
+{
+ if (ctx->argc <= 0)
+ return -1;
+
+ if (keep)
+ ctx->out[ctx->cpidx++] = ctx->argv[0];
+
+ ctx->argc--;
+ ctx->argv++;
+
+ return 0;
+}
+
int parse_options_end(struct parse_opt_ctx_t *ctx)
{
memmove(ctx->out + ctx->cpidx, ctx->argv, ctx->argc * sizeof(*ctx->out));
diff --git a/parse-options.h b/parse-options.h
index 407697a..d3b1932 100644
--- a/parse-options.h
+++ b/parse-options.h
@@ -187,6 +187,10 @@ extern int parse_options_step(struct parse_opt_ctx_t *ctx,
const struct option *options,
const char * const usagestr[]);
+extern const char *parse_options_current(struct parse_opt_ctx_t *ctx);
+
+extern int parse_options_next(struct parse_opt_ctx_t *ctx, int keep);
+
extern int parse_options_end(struct parse_opt_ctx_t *ctx);
extern int parse_options_concat(struct option *dst, size_t, struct option *src);
--
1.7.2.20.g388bbb