2 * Copyright (C) 2021 Simon Marchi <simon.marchi@efficios.com>
4 * SPDX-License-Identifier: GPL-2.0-only
8 #ifndef COMMON_ARGPAR_UTILS_H
9 #define COMMON_ARGPAR_UTILS_H
17 #include <common/macros.h>
18 #include <common/argpar/argpar.h>
19 #include <common/string-utils/format.h>
21 enum parse_next_item_status
23 PARSE_NEXT_ITEM_STATUS_OK
= 0,
24 PARSE_NEXT_ITEM_STATUS_END
= 1,
25 PARSE_NEXT_ITEM_STATUS_ERROR
= -1,
29 * Parse the next argpar item using `iter`.
31 * The item in `*item` is always freed and cleared on entry.
33 * If an item is parsed successfully, return the new item in `*item` and return
34 * PARSE_NEXT_ITEM_STATUS_OK.
36 * If the end of the argument list is reached, return
37 * PARSE_NEXT_ITEM_STATUS_END.
39 * On error, print a descriptive error message and return
40 * PARSE_NEXT_ITEM_STATUS_ERROR. If `context_fmt` is non-NULL, it is formatted
41 * using the following arguments and prepended to the error message.
42 * Add `argc_offset` to the argument index mentioned in the error message.
44 * If `unknown_opt_is_error` is true, an unknown option is considered an error.
45 * Otherwise, it is considered as the end of the argument list.
47 ATTR_FORMAT_PRINTF(6, 7)
48 enum parse_next_item_status
parse_next_item(struct argpar_iter
*iter
,
49 const struct argpar_item
**item
, int argc_offset
,
50 const char **argv
, bool unknown_opt_is_error
,
51 const char *context_fmt
, ...);