-int argpar_state_get_ingested_orig_args(struct argpar_state *state)
-{
- return state->i;
-}
-
-ARGPAR_HIDDEN
-struct argpar_parse_ret argpar_parse(unsigned int argc,
- const char * const *argv,
- const struct argpar_opt_descr * const descrs,
- bool fail_on_unknown_opt)
-{
- struct argpar_parse_ret parse_ret = { 0 };
- struct argpar_item *item = NULL;
- struct argpar_state *state = NULL;
-
- parse_ret.items = new_item_array();
- if (!parse_ret.items) {
- parse_ret.error = strdup("Failed to create items array.");
- ARGPAR_ASSERT(parse_ret.error);
- goto error;
- }
-
- state = argpar_state_create(argc, argv, descrs);
- if (!state) {
- parse_ret.error = strdup("Failed to create argpar state.");
- ARGPAR_ASSERT(parse_ret.error);
- goto error;
- }
-
- while (true) {
- enum argpar_state_parse_next_status status;
-
- status = argpar_state_parse_next(state, &item, &parse_ret.error);
- if (status == ARGPAR_STATE_PARSE_NEXT_STATUS_ERROR) {
- goto error;
- } else if (status == ARGPAR_STATE_PARSE_NEXT_STATUS_END) {
- break;
- } else if (status == ARGPAR_STATE_PARSE_NEXT_STATUS_ERROR_UNKNOWN_OPT) {
- if (fail_on_unknown_opt) {
- parse_ret.ingested_orig_args =
- argpar_state_get_ingested_orig_args(state);
- prepend_while_parsing_arg_to_error(
- &parse_ret.error, parse_ret.ingested_orig_args,
- argv[parse_ret.ingested_orig_args]);
- status = ARGPAR_STATE_PARSE_NEXT_STATUS_ERROR;
- goto error;
- }
-
- free(parse_ret.error);
- parse_ret.error = NULL;
- break;
- }
-
- ARGPAR_ASSERT(status == ARGPAR_STATE_PARSE_NEXT_STATUS_OK);
-
- if (!push_item(parse_ret.items, item)) {
- goto error;
- }
- item = NULL;
- }
-
- ARGPAR_ASSERT(!parse_ret.error);
- parse_ret.ingested_orig_args =
- argpar_state_get_ingested_orig_args(state);
- goto end;
-
-error:
- ARGPAR_ASSERT(parse_ret.error);
-
- /* That's how we indicate that an error occurred */
- destroy_item_array(parse_ret.items);
- parse_ret.items = NULL;
-
-end:
- argpar_state_destroy(state);
- argpar_item_destroy(item);
- return parse_ret;
-}
-
-ARGPAR_HIDDEN
-void argpar_parse_ret_fini(struct argpar_parse_ret *ret)