-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 I did some changes. You can read it in the commit log. Nothing major.
Merged thanks! David On 12-01-24 11:28 AM, Simon Marchi wrote: > This is intended to be used for programmable Bash completion. > > Modified from previous version: > - Changed '\0' to 0 to match current coding style. > > Signed-off-by: Simon Marchi <[email protected]> > --- > src/bin/lttng/commands/add_context.c | 6 ++++++ > src/bin/lttng/commands/calibrate.c | 6 ++++++ > src/bin/lttng/commands/create.c | 11 +++++++++-- > src/bin/lttng/commands/destroy.c | 6 ++++++ > src/bin/lttng/commands/disable_channels.c | 6 ++++++ > src/bin/lttng/commands/disable_events.c | 6 ++++++ > src/bin/lttng/commands/enable_channels.c | 5 +++++ > src/bin/lttng/commands/enable_events.c | 6 ++++++ > src/bin/lttng/commands/list.c | 6 ++++++ > src/bin/lttng/commands/set_session.c | 6 ++++++ > src/bin/lttng/commands/start.c | 6 ++++++ > src/bin/lttng/commands/stop.c | 6 ++++++ > src/bin/lttng/commands/version.c | 6 ++++++ > src/bin/lttng/utils.c | 25 +++++++++++++++++++++++++ > src/bin/lttng/utils.h | 3 +++ > 15 files changed, 108 insertions(+), 2 deletions(-) > > diff --git a/src/bin/lttng/commands/add_context.c > b/src/bin/lttng/commands/add_context.c > index 260c300..a49046c 100644 > --- a/src/bin/lttng/commands/add_context.c > +++ b/src/bin/lttng/commands/add_context.c > @@ -48,6 +48,7 @@ enum { > OPT_HELP = 1, > OPT_TYPE, > OPT_USERSPACE, > + OPT_LIST_OPTIONS, > }; > > static struct lttng_handle *handle; > @@ -149,6 +150,7 @@ static struct poptOption long_options[] = { > {"userspace", 'u', POPT_ARG_NONE, 0, OPT_USERSPACE, 0, 0}, > #endif > {"type", 't', POPT_ARG_STRING, &opt_type, OPT_TYPE, 0, 0}, > + {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, > NULL}, > {0, 0, 0, 0, 0, 0, 0} > }; > > @@ -463,6 +465,10 @@ int cmd_add_context(int argc, const char **argv) > opt_cmd_name = poptGetOptArg(pc); > #endif > break; > + case OPT_LIST_OPTIONS: > + list_cmd_options(stdout, long_options); > + ret = CMD_SUCCESS; > + goto end; > default: > usage(stderr); > ret = CMD_UNDEFINED; > diff --git a/src/bin/lttng/commands/calibrate.c > b/src/bin/lttng/commands/calibrate.c > index a0e852f..0561f4d 100644 > --- a/src/bin/lttng/commands/calibrate.c > +++ b/src/bin/lttng/commands/calibrate.c > @@ -48,6 +48,7 @@ enum { > OPT_FUNCTION_ENTRY, > OPT_SYSCALL, > OPT_USERSPACE, > + OPT_LIST_OPTIONS, > }; > > static struct lttng_handle *handle; > @@ -75,6 +76,7 @@ static struct poptOption long_options[] = { > {"function:entry", 0, POPT_ARG_NONE, 0, OPT_FUNCTION_ENTRY, 0, 0}, > #endif > {"syscall", 0, POPT_ARG_NONE, 0, OPT_SYSCALL, 0, 0}, > + {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL}, > {0, 0, 0, 0, 0, 0, 0} > }; > > @@ -217,6 +219,10 @@ int cmd_calibrate(int argc, const char **argv) > case OPT_USERSPACE: > opt_userspace = 1; > break; > + case OPT_LIST_OPTIONS: > + list_cmd_options(stdout, long_options); > + ret = CMD_SUCCESS; > + goto end; > default: > usage(stderr); > ret = CMD_UNDEFINED; > diff --git a/src/bin/lttng/commands/create.c b/src/bin/lttng/commands/create.c > index 835d82a..8f19301 100644 > --- a/src/bin/lttng/commands/create.c > +++ b/src/bin/lttng/commands/create.c > @@ -27,18 +27,21 @@ > #include <unistd.h> > > #include "../command.h" > +#include "../utils.h" > > static char *opt_output_path; > static char *opt_session_name; > > enum { > OPT_HELP = 1, > + OPT_LIST_OPTIONS, > }; > > static struct poptOption long_options[] = { > /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */ > - {"help", 'h', POPT_ARG_NONE, 0, OPT_HELP, 0, 0}, > - {"output", 'o', POPT_ARG_STRING, &opt_output_path, 0, 0, 0}, > + {"help", 'h', POPT_ARG_NONE, NULL, OPT_HELP, NULL, NULL}, > + {"output", 'o', POPT_ARG_STRING, &opt_output_path, 0, NULL, NULL}, > + {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL}, > {0, 0, 0, 0, 0, 0, 0} > }; > > @@ -160,6 +163,10 @@ int cmd_create(int argc, const char **argv) > case OPT_HELP: > usage(stderr); > goto end; > + case OPT_LIST_OPTIONS: > + list_cmd_options(stdout, long_options); > + ret = CMD_SUCCESS; > + goto end; > default: > usage(stderr); > ret = CMD_UNDEFINED; > diff --git a/src/bin/lttng/commands/destroy.c > b/src/bin/lttng/commands/destroy.c > index b793159..d324c7b 100644 > --- a/src/bin/lttng/commands/destroy.c > +++ b/src/bin/lttng/commands/destroy.c > @@ -31,11 +31,13 @@ static char *opt_session_name; > > enum { > OPT_HELP = 1, > + OPT_LIST_OPTIONS, > }; > > static struct poptOption long_options[] = { > /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */ > {"help", 'h', POPT_ARG_NONE, 0, OPT_HELP, 0, 0}, > + {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL}, > {0, 0, 0, 0, 0, 0, 0} > }; > > @@ -116,6 +118,10 @@ int cmd_destroy(int argc, const char **argv) > case OPT_HELP: > usage(stderr); > goto end; > + case OPT_LIST_OPTIONS: > + list_cmd_options(stdout, long_options); > + ret = CMD_SUCCESS; > + goto end; > default: > usage(stderr); > ret = CMD_UNDEFINED; > diff --git a/src/bin/lttng/commands/disable_channels.c > b/src/bin/lttng/commands/disable_channels.c > index f8ed517..2e5fe0c 100644 > --- a/src/bin/lttng/commands/disable_channels.c > +++ b/src/bin/lttng/commands/disable_channels.c > @@ -40,6 +40,7 @@ static pid_t opt_pid; > enum { > OPT_HELP = 1, > OPT_USERSPACE, > + OPT_LIST_OPTIONS, > }; > > static struct lttng_handle *handle; > @@ -56,6 +57,7 @@ static struct poptOption long_options[] = { > #else > {"userspace", 'u', POPT_ARG_NONE, 0, OPT_USERSPACE, 0, 0}, > #endif > + {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL}, > {0, 0, 0, 0, 0, 0, 0} > }; > > @@ -153,6 +155,10 @@ int cmd_disable_channels(int argc, const char **argv) > case OPT_USERSPACE: > opt_userspace = 1; > break; > + case OPT_LIST_OPTIONS: > + list_cmd_options(stdout, long_options); > + ret = CMD_SUCCESS; > + goto end; > default: > usage(stderr); > ret = CMD_UNDEFINED; > diff --git a/src/bin/lttng/commands/disable_events.c > b/src/bin/lttng/commands/disable_events.c > index 7446168..80bae3c 100644 > --- a/src/bin/lttng/commands/disable_events.c > +++ b/src/bin/lttng/commands/disable_events.c > @@ -42,6 +42,7 @@ static pid_t opt_pid; > enum { > OPT_HELP = 1, > OPT_USERSPACE, > + OPT_LIST_OPTIONS, > }; > > static struct lttng_handle *handle; > @@ -60,6 +61,7 @@ static struct poptOption long_options[] = { > #else > {"userspace", 'u', POPT_ARG_NONE, 0, OPT_USERSPACE, 0, 0}, > #endif > + {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL}, > {0, 0, 0, 0, 0, 0, 0} > }; > > @@ -211,6 +213,10 @@ int cmd_disable_events(int argc, const char **argv) > case OPT_USERSPACE: > opt_userspace = 1; > break; > + case OPT_LIST_OPTIONS: > + list_cmd_options(stdout, long_options); > + ret = CMD_SUCCESS; > + goto end; > default: > usage(stderr); > ret = CMD_UNDEFINED; > diff --git a/src/bin/lttng/commands/enable_channels.c > b/src/bin/lttng/commands/enable_channels.c > index 5443d78..4e7f0c6 100644 > --- a/src/bin/lttng/commands/enable_channels.c > +++ b/src/bin/lttng/commands/enable_channels.c > @@ -48,6 +48,7 @@ enum { > OPT_SWITCH_TIMER, > OPT_READ_TIMER, > OPT_USERSPACE, > + OPT_LIST_OPTIONS, > }; > > static struct lttng_handle *handle; > @@ -70,6 +71,7 @@ static struct poptOption long_options[] = { > {"num-subbuf", 0, POPT_ARG_INT, 0, OPT_NUM_SUBBUF, 0, 0}, > {"switch-timer", 0, POPT_ARG_INT, 0, OPT_SWITCH_TIMER, 0, 0}, > {"read-timer", 0, POPT_ARG_INT, 0, OPT_READ_TIMER, 0, 0}, > + {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, > NULL}, > {0, 0, 0, 0, 0, 0, 0} > }; > > @@ -258,6 +260,9 @@ int cmd_enable_channels(int argc, const char **argv) > case OPT_USERSPACE: > opt_userspace = 1; > break; > + case OPT_LIST_OPTIONS: > + list_cmd_options(stdout, long_options); > + goto end; > default: > usage(stderr); > ret = CMD_UNDEFINED; > diff --git a/src/bin/lttng/commands/enable_events.c > b/src/bin/lttng/commands/enable_events.c > index c5a969f..58b3b23 100644 > --- a/src/bin/lttng/commands/enable_events.c > +++ b/src/bin/lttng/commands/enable_events.c > @@ -54,6 +54,7 @@ enum { > OPT_SYSCALL, > OPT_USERSPACE, > OPT_TRACEPOINT_LOGLEVEL, > + OPT_LIST_OPTIONS, > }; > > static struct lttng_handle *handle; > @@ -84,6 +85,7 @@ static struct poptOption long_options[] = { > #endif > {"syscall", 0, POPT_ARG_NONE, 0, OPT_SYSCALL, 0, 0}, > {"loglevel", 0, POPT_ARG_NONE, 0, OPT_TRACEPOINT_LOGLEVEL, 0, > 0}, > + {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL}, > {0, 0, 0, 0, 0, 0, 0} > }; > > @@ -432,6 +434,10 @@ int cmd_enable_events(int argc, const char **argv) > case OPT_TRACEPOINT_LOGLEVEL: > opt_event_type = LTTNG_EVENT_TRACEPOINT_LOGLEVEL; > break; > + case OPT_LIST_OPTIONS: > + list_cmd_options(stdout, long_options); > + ret = CMD_SUCCESS; > + goto end; > default: > usage(stderr); > ret = CMD_UNDEFINED; > diff --git a/src/bin/lttng/commands/list.c b/src/bin/lttng/commands/list.c > index f09edae..1d63e15 100644 > --- a/src/bin/lttng/commands/list.c > +++ b/src/bin/lttng/commands/list.c > @@ -43,6 +43,7 @@ const char *indent8 = " "; > enum { > OPT_HELP = 1, > OPT_USERSPACE, > + OPT_LIST_OPTIONS, > }; > > static struct lttng_handle *handle; > @@ -60,6 +61,7 @@ static struct poptOption long_options[] = { > #endif > {"channel", 'c', POPT_ARG_STRING, &opt_channel, 0, 0, 0}, > {"domain", 'd', POPT_ARG_VAL, &opt_domain, 1, 0, 0}, > + {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL}, > {0, 0, 0, 0, 0, 0, 0} > }; > > @@ -556,6 +558,10 @@ int cmd_list(int argc, const char **argv) > case OPT_USERSPACE: > opt_userspace = 1; > break; > + case OPT_LIST_OPTIONS: > + list_cmd_options(stdout, long_options); > + ret = CMD_SUCCESS; > + goto end; > default: > usage(stderr); > ret = CMD_UNDEFINED; > diff --git a/src/bin/lttng/commands/set_session.c > b/src/bin/lttng/commands/set_session.c > index bc25b8d..5e23343 100644 > --- a/src/bin/lttng/commands/set_session.c > +++ b/src/bin/lttng/commands/set_session.c > @@ -31,11 +31,13 @@ static char *opt_session_name; > > enum { > OPT_HELP = 1, > + OPT_LIST_OPTIONS, > }; > > static struct poptOption long_options[] = { > /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */ > {"help", 'h', POPT_ARG_NONE, 0, OPT_HELP, 0, 0}, > + {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, > NULL}, > {0, 0, 0, 0, 0, 0, 0} > }; > > @@ -89,6 +91,10 @@ int cmd_set_session(int argc, const char **argv) > usage(stderr); > ret = CMD_SUCCESS; > goto end; > + case OPT_LIST_OPTIONS: > + list_cmd_options(stdout, long_options); > + ret = CMD_SUCCESS; > + goto end; > default: > usage(stderr); > ret = CMD_UNDEFINED; > diff --git a/src/bin/lttng/commands/start.c b/src/bin/lttng/commands/start.c > index 8292787..0a11c40 100644 > --- a/src/bin/lttng/commands/start.c > +++ b/src/bin/lttng/commands/start.c > @@ -31,11 +31,13 @@ static char *opt_session_name; > > enum { > OPT_HELP = 1, > + OPT_LIST_OPTIONS, > }; > > static struct poptOption long_options[] = { > /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */ > {"help", 'h', POPT_ARG_NONE, 0, OPT_HELP, 0, 0}, > + {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL}, > {0, 0, 0, 0, 0, 0, 0} > }; > > @@ -109,6 +111,10 @@ int cmd_start(int argc, const char **argv) > usage(stderr); > ret = CMD_SUCCESS; > goto end; > + case OPT_LIST_OPTIONS: > + list_cmd_options(stdout, long_options); > + ret = CMD_SUCCESS; > + goto end; > default: > usage(stderr); > ret = CMD_UNDEFINED; > diff --git a/src/bin/lttng/commands/stop.c b/src/bin/lttng/commands/stop.c > index 0a94264..1a4f8c3 100644 > --- a/src/bin/lttng/commands/stop.c > +++ b/src/bin/lttng/commands/stop.c > @@ -31,11 +31,13 @@ static char *opt_session_name; > > enum { > OPT_HELP = 1, > + OPT_LIST_OPTIONS, > }; > > static struct poptOption long_options[] = { > /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */ > {"help", 'h', POPT_ARG_NONE, 0, OPT_HELP, 0, 0}, > + {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL}, > {0, 0, 0, 0, 0, 0, 0} > }; > > @@ -106,6 +108,10 @@ int cmd_stop(int argc, const char **argv) > usage(stderr); > ret = CMD_SUCCESS; > goto end; > + case OPT_LIST_OPTIONS: > + list_cmd_options(stdout, long_options); > + ret = CMD_SUCCESS; > + goto end; > default: > usage(stderr); > ret = CMD_UNDEFINED; > diff --git a/src/bin/lttng/commands/version.c > b/src/bin/lttng/commands/version.c > index c9b547b..cc93d69 100644 > --- a/src/bin/lttng/commands/version.c > +++ b/src/bin/lttng/commands/version.c > @@ -30,11 +30,13 @@ > > enum { > OPT_HELP = 1, > + OPT_LIST_OPTIONS, > }; > > static struct poptOption long_options[] = { > /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */ > {"help", 'h', POPT_ARG_NONE, 0, OPT_HELP, 0, 0}, > + {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL}, > {0, 0, 0, 0, 0, 0, 0} > }; > > @@ -66,6 +68,10 @@ int cmd_version(int argc, const char **argv) > usage(stderr); > ret = CMD_SUCCESS; > goto end; > + case OPT_LIST_OPTIONS: > + list_cmd_options(stdout, long_options); > + ret = CMD_SUCCESS; > + goto end; > default: > usage(stderr); > ret = CMD_UNDEFINED; > diff --git a/src/bin/lttng/utils.c b/src/bin/lttng/utils.c > index e993f0f..635bf77 100644 > --- a/src/bin/lttng/utils.c > +++ b/src/bin/lttng/utils.c > @@ -17,10 +17,12 @@ > */ > > #include <stdlib.h> > +#include <ctype.h> > > #include <common/error.h> > > #include "conf.h" > +#include "utils.h" > > /* > * get_session_name > @@ -48,3 +50,26 @@ error: > DBG("Session name found: %s", session_name); > return session_name; > } > + > + > +/* > + * list_cmd_options > + * > + * Prints a simple list of the options available to a command. This is > intended > + * to be easily parsed for bash completion. > + */ > +void list_cmd_options(FILE *ofp, struct poptOption *options) > +{ > + int i; > + struct poptOption *option = NULL; > + > + for (i = 0; options[i].longName != NULL; i++) { > + option = &options[i]; > + > + fprintf(ofp, "--%s\n", option->longName); > + > + if (isprint(option->shortName)) { > + fprintf(ofp, "-%c\n", option->shortName); > + } > + } > +} > diff --git a/src/bin/lttng/utils.h b/src/bin/lttng/utils.h > index 5492d5e..e609b70 100644 > --- a/src/bin/lttng/utils.h > +++ b/src/bin/lttng/utils.h > @@ -19,8 +19,11 @@ > #ifndef _LTTNG_UTILS_H > #define _LTTNG_UTILS_H > > +#include <popt.h> > + > char *get_config_file_path(void); > char *get_session_name(void); > int set_session_name(char *name); > +void list_cmd_options(FILE *ofp, struct poptOption *options); > > #endif /* _LTTNG_UTILS_H */ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iQEcBAEBAgAGBQJPHuiIAAoJEELoaioR9I02B5QIAJWxrwog0wLHmvhqeslvKC9m f0UgT5k47+nAhp+0Gtkv4Rc+CJxwNYT4inplw6p0I2D20tiofQc2AaTGha7x7Nqu 0HuOpg5CSDWFcV57vYLRXqTAVbNeqItSlFO+n7573JFhraTbP/Jgnb4g76H5FS9X AnzqOTOcnTYjD7vuBqb/dcAw3ZI7rTBYm4agBWtI/FOz52PV73FBfrM5G1mVFm/j alb1f5i0W/TzYXwgR5IdbK5WlCE3fUQ447gH9wl8tg985UM2Hq/1npq9sEOousze 1xX4yH5aZ7q0qvYz4v2iXG+MPazch081ZL93czTFS5XkMUg1u6YeOjIQpc+FyFg= =7FZy -----END PGP SIGNATURE----- _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
