X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng%2Fcommands%2Ftrack-untrack.c;h=3073996a9f6d19acfa257e87b1075959a9da3521;hp=a4f4689e7457c226821280778aff330fdc376434;hb=dc1c9a44fba1a368c283186e531c217206f5e816;hpb=890d8fe47755c3bad936389cf48ffa141cff41c9 diff --git a/src/bin/lttng/commands/track-untrack.c b/src/bin/lttng/commands/track-untrack.c index a4f4689e7..3073996a9 100644 --- a/src/bin/lttng/commands/track-untrack.c +++ b/src/bin/lttng/commands/track-untrack.c @@ -64,28 +64,6 @@ static struct poptOption long_options[] = { { 0, 0, 0, 0, 0, 0, 0, }, }; -/* - * usage - */ -static void usage(FILE *ofp, const char *cmd_str) -{ - fprintf(ofp, "usage: lttng %s [-k|-u] [OPTIONS]\n", cmd_str); - fprintf(ofp, "\n"); - fprintf(ofp, "If no session is given (-s), the context is added to\n"); - fprintf(ofp, "the current sesssion. Exactly one domain (-k or -u)\n"); - fprintf(ofp, "must be specified.\n"); - fprintf(ofp, "\n"); - fprintf(ofp, "Options:\n"); - fprintf(ofp, " -h, --help Show this help.\n"); - fprintf(ofp, " --list-options Simple listing of options.\n"); - fprintf(ofp, " -s, --session NAME Apply to session name.\n"); - fprintf(ofp, " -k, --kernel Apply to the kernel tracer.\n"); - fprintf(ofp, " -u, --userspace Apply to the user-space tracer.\n"); - fprintf(ofp, " -p, --pid [PID] Process ID tracker. Leave PID empty when used with --all.\n"); - fprintf(ofp, " -a, --all All PIDs (use with --pid).\n"); - fprintf(ofp, "\n"); -} - static int parse_pid_string(const char *_pid_string, int all, int **_pid_list, int *nr_pids) @@ -109,7 +87,7 @@ int parse_pid_string(const char *_pid_string, goto error; } if (all) { - pid_list = zmalloc(sizeof(*_pid_list)); + pid_list = zmalloc(sizeof(*pid_list)); if (!pid_list) { ERR("Out of memory"); retval = CMD_ERROR; @@ -153,6 +131,11 @@ int parse_pid_string(const char *_pid_string, /* For next loop */ one_pid_str = strtok_r(NULL, ",", &iter); } + if (count == 0) { + ERR("Fatal error occurred when parsing pid string"); + retval = CMD_ERROR; + goto error; + } free(pid_string); /* Identity of delimiter has been lost in first pass. */ @@ -171,7 +154,7 @@ int parse_pid_string(const char *_pid_string, goto error; } - /* Copy */ + /* Reparse string and populate the pid list. */ count = 0; one_pid_str = strtok_r(pid_string, ",", &iter); while (one_pid_str != NULL) { @@ -236,7 +219,6 @@ enum cmd_error_code track_untrack_pid(enum cmd_type cmd_type, const char *cmd_st ret = parse_pid_string(pid_string, all, &pid_list, &nr_pids); if (ret != CMD_SUCCESS) { ERR("Error parsing PID string"); - usage(stderr, cmd_str); retval = CMD_ERROR; goto end; } @@ -280,8 +262,14 @@ enum cmd_error_code track_untrack_pid(enum cmd_type cmd_type, const char *cmd_st break; } } else { - MSG("PID %i %sed in session %s", - pid_list[i], cmd_str, session_name); + if (pid_list[i] != -1) { + MSG("PID %i %sed in session %s", + pid_list[i], cmd_str, + session_name); + } else { + MSG("All PIDs %sed in session %s", + cmd_str, session_name); + } success = 1; } @@ -343,7 +331,7 @@ const char *get_mi_element_command(enum cmd_type cmd_type) */ static int cmd_track_untrack(enum cmd_type cmd_type, const char *cmd_str, - int argc, const char **argv) + int argc, const char **argv, const char *help_msg) { int opt, ret = 0; enum cmd_error_code command_ret = CMD_SUCCESS; @@ -353,7 +341,6 @@ int cmd_track_untrack(enum cmd_type cmd_type, const char *cmd_str, struct mi_writer *writer = NULL; if (argc < 1) { - usage(stderr, cmd_str); command_ret = CMD_ERROR; goto end; } @@ -364,7 +351,7 @@ int cmd_track_untrack(enum cmd_type cmd_type, const char *cmd_str, while ((opt = poptGetNextOpt(pc)) != -1) { switch (opt) { case OPT_HELP: - usage(stdout, cmd_str); + SHOW_HELP(); goto end; case OPT_LIST_OPTIONS: list_cmd_options(stdout, long_options); @@ -374,7 +361,6 @@ int cmd_track_untrack(enum cmd_type cmd_type, const char *cmd_str, opt_pid = 1; break; default: - usage(stderr, cmd_str); command_ret = CMD_UNDEFINED; goto end; } @@ -382,7 +368,7 @@ int cmd_track_untrack(enum cmd_type cmd_type, const char *cmd_str, ret = print_missing_or_multiple_domains(opt_kernel + opt_userspace); if (ret) { - ret = CMD_ERROR; + command_ret = CMD_ERROR; goto end; } @@ -399,7 +385,6 @@ int cmd_track_untrack(enum cmd_type cmd_type, const char *cmd_str, /* Currently only PID tracker is supported */ if (!opt_pid) { ERR("Please specify at least one tracker with its expected arguments"); - usage(stderr, cmd_str); command_ret = CMD_ERROR; goto end; } @@ -480,10 +465,26 @@ end: int cmd_track(int argc, const char **argv) { - return cmd_track_untrack(CMD_TRACK, "track", argc, argv); + static const char *help_msg = +#ifdef LTTNG_EMBED_HELP +#include +#else + NULL +#endif + ; + + return cmd_track_untrack(CMD_TRACK, "track", argc, argv, help_msg); } int cmd_untrack(int argc, const char **argv) { - return cmd_track_untrack(CMD_UNTRACK, "untrack", argc, argv); + static const char *help_msg = +#ifdef LTTNG_EMBED_HELP +#include +#else + NULL +#endif + ; + + return cmd_track_untrack(CMD_UNTRACK, "untrack", argc, argv, help_msg); }