X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fopt%2Fusage.c;h=12f44a48752e0e0d4e0d722c74b7513561334733;hp=b71fb334627f174fbc8bfd2022e87c0304d43fd8;hb=7d1f0c73e4d321561abb74f82c8be97f10d69836;hpb=79715b8c08446fe5e74d2ab9e9db00175169eab3 diff --git a/ccan/opt/usage.c b/ccan/opt/usage.c index b71fb334..12f44a48 100644 --- a/ccan/opt/usage.c +++ b/ccan/opt/usage.c @@ -4,11 +4,14 @@ #include #include /* Required on Solaris for struct winsize */ #endif +#if HAVE_SYS_UNISTD_H #include /* Required on Solaris for ioctl */ +#endif #include #include #include #include +#include #include "private.h" /* We only use this for pointer comparisons. */ @@ -107,7 +110,7 @@ static char *add_desc(char *base, size_t *len, size_t *max, base = add_str(base, len, max, opt->names); off = strlen(opt->names); - if (opt->type == OPT_HASARG + if ((opt->type & OPT_HASARG) && !strchr(opt->names, ' ') && !strchr(opt->names, '=')) { base = add_str(base, len, max, " "); @@ -227,3 +230,17 @@ char *opt_usage(const char *argv0, const char *extra) ret[len] = '\0'; return ret; } + +void opt_usage_exit_fail(const char *msg, ...) +{ + va_list ap; + + if (opt_argv0) + fprintf(stderr, "%s: ", opt_argv0); + va_start(ap, msg); + vfprintf(stderr, msg, ap); + va_end(ap); + fprintf(stderr, "\n%s", + opt_usage(opt_argv0 ? opt_argv0 : "", NULL)); + exit(1); +}