The following changes since commit 250e878ab5f26b32facbb6e134f3738aa1aa0120: include sys/sysmacros.h for major/minor (2016-04-21 07:47:26 -0400) are available in the git repository at: git://git.kernel.dk/fio.git master for you to fetch changes up to 603e604eb6d9b3ba9f201a6bff0a18da1a6c0967: oslib/getopt_long: allow (unique) short match (2016-04-22 18:14:24 -0400) ---------------------------------------------------------------- Jens Axboe (1): oslib/getopt_long: allow (unique) short match oslib/getopt_long.c | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) --- Diff of recent changes: diff --git a/oslib/getopt_long.c b/oslib/getopt_long.c index 11d879a..8ec7741 100644 --- a/oslib/getopt_long.c +++ b/oslib/getopt_long.c @@ -26,14 +26,14 @@ static struct getopt_private_state { } pvt; static inline const char *option_matches(const char *arg_str, - const char *opt_name) + const char *opt_name, int smatch) { while (*arg_str != '\0' && *arg_str != '=') { if (*arg_str++ != *opt_name++) return NULL; } - if (*opt_name) + if (*opt_name && !smatch) return NULL; return arg_str; @@ -84,11 +84,37 @@ int getopt_long_only(int argc, char *const *argv, const char *optstring, } for (lo = longopts; lo->name; lo++) { - if ((opt_end = option_matches(carg+2, lo->name))) + opt_end = option_matches(carg+2, lo->name, 0); + if (opt_end) break; } - if (!opt_end) - return '?'; + /* + * The GNU getopt_long_only() apparently allows a short match, + * if it's unique and if we don't have a full match. Let's + * do the same here, search and see if there is one (and only + * one) short match. + */ + if (!opt_end) { + const struct option *lo_match = NULL; + + for (lo = longopts; lo->name; lo++) { + const char *ret; + + ret = option_matches(carg+2, lo->name, 1); + if (!ret) + continue; + if (!opt_end) { + opt_end = ret; + lo_match = lo; + } else { + opt_end = NULL; + break; + } + } + if (!opt_end) + return '?'; + lo = lo_match; + } if (longindex) *longindex = lo-longopts; -- To unsubscribe from this list: send the line "unsubscribe fio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html