#include <getopt.h>
#include <limits.h>
#include <stdlib.h>
+#include "dynamic-string.h"
#include "ovs-thread.h"
#include "util.h"
#include "vlog.h"
return xstrdup(short_options);
}
+/* Given the GNU-style options in 'options', prints all options. */
+void
+print_options(const struct option options[])
+{
+ struct ds ds = DS_EMPTY_INITIALIZER;
+
+ for (; options->name; options++) {
+ const struct option *o = options;
+ const char *arg = o->has_arg == required_argument ? "ARG" : "[ARG]";
+
+ ds_put_format(&ds, "--%s%s%s\n", o->name, o->has_arg ? "=" : "",
+ o->has_arg ? arg : "");
+ if (o->flag == NULL && o->val > 0 && o->val <= UCHAR_MAX) {
+ ds_put_format(&ds, "-%c %s\n", o->val, o->has_arg ? arg : "");
+ }
+ }
+ printf("%s", ds.string);
+ ds_destroy(&ds);
+}
+
/* Runs the command designated by argv[0] within the command table specified by
* 'commands', which must be terminated by a command whose 'name' member is a
* null pointer.
};
char *long_options_to_short_options(const struct option *options);
+void print_options(const struct option *options);
void run_command(int argc, char *argv[], const struct command[]);
void proctitle_init(int argc, char **argv);
{"more", no_argument, NULL, 'm'},
{"verbose", optional_argument, NULL, 'v'},
{"help", no_argument, NULL, 'h'},
+ {"option", no_argument, NULL, 'o'},
{"version", no_argument, NULL, 'V'},
{NULL, 0, NULL, 0},
};
case 'h':
usage();
+ case 'o':
+ print_options(long_options);
+ exit(EXIT_SUCCESS);
+
case 'V':
ovs_print_version(0, 0);
exit(EXIT_SUCCESS);
parse_command_line(int argc, char *argv[])
{
enum {
+ OPT_START = UCHAR_MAX + 1,
VLOG_OPTION_ENUMS
};
static const struct option long_options[] = {
{"target", required_argument, NULL, 't'},
{"execute", no_argument, NULL, 'e'},
{"help", no_argument, NULL, 'h'},
+ {"option", no_argument, NULL, 'o'},
{"version", no_argument, NULL, 'V'},
{"timeout", required_argument, NULL, 'T'},
VLOG_LONG_OPTIONS,
usage();
break;
+ case 'o':
+ print_options(long_options);
+ exit(EXIT_SUCCESS);
+
case 'T':
time_alarm(atoi(optarg));
break;
{"more", no_argument, NULL, 'm'},
{"timeout", required_argument, NULL, 't'},
{"help", no_argument, NULL, 'h'},
+ {"option", no_argument, NULL, 'o'},
{"version", no_argument, NULL, 'V'},
VLOG_LONG_OPTIONS,
{NULL, 0, NULL, 0},
case 'h':
usage(NULL);
+ case 'o':
+ print_options(long_options);
+ exit(EXIT_SUCCESS);
+
case 'V':
ovs_print_version(0, 0);
exit(EXIT_SUCCESS);
" -V, --version display version information\n");
exit(EXIT_SUCCESS);
}
-
{"rsort", optional_argument, NULL, OPT_RSORT},
{"unixctl", required_argument, NULL, OPT_UNIXCTL},
{"help", no_argument, NULL, 'h'},
+ {"option", no_argument, NULL, 'o'},
DAEMON_LONG_OPTIONS,
OFP_VERSION_LONG_OPTIONS,
VLOG_LONG_OPTIONS,
case 'h':
usage();
+ case 'o':
+ print_options(long_options);
+ exit(EXIT_SUCCESS);
+
case OPT_STRICT:
strict = true;
break;