*/
char *opt_usage(const char *argv0, const char *extra);
+/**
+ * opt_usage_exit_fail - complain about bad usage to stderr, exit with status 1.
+ * @msg...: printf-style message to output.
+ *
+ * This prints argv[0] (if opt_parse has been called), a colon, then
+ * the message to stderr (just like errx()). Then it prints out the
+ * usage message, taken from any registered option which uses
+ * opt_usage_and_exit() as described in opt_usage(argv0, NULL) above.
+ * Then it exits with status 1.
+ *
+ * Example:
+ * if (argc != 5)
+ * opt_usage_exit_fail("Need 5 arguments, only got %u", argc);
+ */
+void opt_usage_exit_fail(const char *msg, ...) NORETURN;
+
/**
* opt_hidden - string for undocumented options.
*
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
+#include <stdarg.h>
#include "private.h"
/* We only use this for pointer comparisons. */
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 : "<program>", NULL));
+ exit(1);
+}