X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=argpar%2Fargpar.c;h=55995124fb6332e5a4a3cf8296b55d55adfde3b2;hb=0a024790c9bd035f94db7919cafc0ffd051452f3;hp=97acdf2d6223f91f167433aaa8079a35cc02bc06;hpb=64875a48cd0151e30a3029422e19ef16526baebf;p=argpar.git diff --git a/argpar/argpar.c b/argpar/argpar.c index 97acdf2..5599512 100644 --- a/argpar/argpar.c +++ b/argpar/argpar.c @@ -24,12 +24,6 @@ #define ARGPAR_ASSERT(_cond) assert(_cond) -#ifdef __MINGW_PRINTF_FORMAT -# define ARGPAR_PRINTF_FORMAT __MINGW_PRINTF_FORMAT -#else -# define ARGPAR_PRINTF_FORMAT printf -#endif - /* * An argpar iterator. * @@ -192,6 +186,12 @@ end: return; } +/* + * Creates and returns an option parsing item for the descriptor `descr` + * and having the argument `arg` (copied; may be `NULL`). + * + * Returns `NULL` on memory error. + */ static struct argpar_item_opt *create_opt_item( const struct argpar_opt_descr * const descr, @@ -224,6 +224,13 @@ end: return opt_item; } +/* + * Creates and returns a non-option parsing item for the original + * argument `arg` having the original index `orig_index` and the + * non-option index `non_opt_index`. + * + * Returns `NULL` on memory error. + */ static struct argpar_item_non_opt *create_non_opt_item(const char * const arg, const unsigned int orig_index, @@ -275,7 +282,7 @@ int set_error(struct argpar_error ** const error, if (unknown_opt_name) { (*error)->unknown_opt_name = ARGPAR_CALLOC(char, - strlen(unknown_opt_name) + 1 + is_short ? 1 : 2); + strlen(unknown_opt_name) + 1 + (is_short ? 1 : 2)); if (!(*error)->unknown_opt_name) { goto error; } @@ -340,6 +347,17 @@ void argpar_error_destroy(const struct argpar_error * const error) } } +/* + * Finds and returns the _first_ descriptor having the short option name + * `short_name` or the long option name `long_name` within the option + * descriptors `descrs`. + * + * `short_name` may be `'\0'` to not consider it. + * + * `long_name` may be `NULL` to not consider it. + * + * Returns `NULL` if no descriptor is found. + */ static const struct argpar_opt_descr *find_descr( const struct argpar_opt_descr * const descrs, @@ -363,6 +381,7 @@ end: return !descr->short_name && !descr->long_name ? NULL : descr; } +/* Return type of parse_short_opt_group() and parse_long_opt() */ enum parse_orig_arg_opt_ret { PARSE_ORIG_ARG_OPT_RET_OK, PARSE_ORIG_ARG_OPT_RET_ERROR_UNKNOWN_OPT = -1, @@ -371,6 +390,15 @@ enum parse_orig_arg_opt_ret { PARSE_ORIG_ARG_OPT_RET_ERROR_MEMORY = -5, }; +/* + * Parses the short option group argument `short_opt_group`, starting + * where needed depending on the state of `iter`. + * + * On success, sets `*item`. + * + * On error (except for `PARSE_ORIG_ARG_OPT_RET_ERROR_MEMORY`), sets + * `*error`. + */ static enum parse_orig_arg_opt_ret parse_short_opt_group( const char * const short_opt_group, @@ -463,6 +491,14 @@ end: return ret; } +/* + * Parses the long option argument `long_opt_arg`. + * + * On success, sets `*item`. + * + * On error (except for `PARSE_ORIG_ARG_OPT_RET_ERROR_MEMORY`), sets + * `*error`. + */ static enum parse_orig_arg_opt_ret parse_long_opt(const char * const long_opt_arg, const char * const next_orig_arg, @@ -576,6 +612,14 @@ end: return ret; } +/* + * Parses the original argument `orig_arg`. + * + * On success, sets `*item`. + * + * On error (except for `PARSE_ORIG_ARG_OPT_RET_ERROR_MEMORY`), sets + * `*error`. + */ static enum parse_orig_arg_opt_ret parse_orig_arg_opt(const char * const orig_arg, const char * const next_orig_arg,