X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=ustctl%2Fustctl.c;h=18f7d307caa64477a7105814a65cf1a8d211ed96;hb=dc6c486b9ac1c9db99050f9d9d1919f9cb651027;hp=b9acc238670ac13a3bd545fb330df5482b3ff26e;hpb=8b26d56b9988ac0c09999c14a08bc28d42551367;p=ust.git diff --git a/ustctl/ustctl.c b/ustctl/ustctl.c index b9acc23..18f7d30 100644 --- a/ustctl/ustctl.c +++ b/ustctl/ustctl.c @@ -45,8 +45,33 @@ void usage(const char *process_name) list_cli_cmds(CLI_DESCRIPTIVE_LIST); } +/* + * Provide backward compatibility for scripts that make use of the + * --commands in ustctl version <= 0.11 + */ +enum command { + CREATE_TRACE=1000, + ALLOC_TRACE, + START_TRACE, + STOP_TRACE, + DESTROY_TRACE, + LIST_MARKERS, + LIST_TRACE_EVENTS, + ENABLE_MARKER, + DISABLE_MARKER, +}; + struct option options[] = { + { "create-trace", 0, 0, CREATE_TRACE }, + { "alloc-trace", 0, 0, ALLOC_TRACE }, + { "start-trace", 0, 0, START_TRACE }, + { "stop-trace", 0, 0, STOP_TRACE }, + { "destroy-trace", 0, 0, DESTROY_TRACE }, + { "list-markers", 0, 0, LIST_MARKERS }, + { "list-trace-events", 0, 0, LIST_TRACE_EVENTS}, + { "enable-marker", 0, 0, ENABLE_MARKER }, + { "disable-marker", 0, 0, DISABLE_MARKER }, {"help", 2, NULL, 'h'}, {"list", 0, NULL, 'l'}, {"extended-list", 0, NULL, 'e'}, @@ -56,7 +81,9 @@ struct option options[] = int main(int argc, char *argv[]) { struct cli_cmd *cli_cmd; + char **args = argv; int opt; + int i; if(argc <= 1) { fprintf(stderr, "No operation specified.\n"); @@ -85,20 +112,48 @@ int main(int argc, char *argv[]) case 'e': list_cli_cmds(CLI_EXTENDED_LIST); exit(EXIT_FAILURE); + case LIST_MARKERS: + case LIST_TRACE_EVENTS: + case CREATE_TRACE: + case ALLOC_TRACE: + case START_TRACE: + case STOP_TRACE: + case DESTROY_TRACE: + case ENABLE_MARKER: + case DISABLE_MARKER: + args = (char **)malloc(sizeof(char *) * (argc + 3)); + optind--; + args[optind] = strdup(&argv[optind][2]); + for (i = optind + 1; i < argc; i++) { + args[i] = argv[i]; + } + if (opt >= CREATE_TRACE && opt <= DESTROY_TRACE) { + args[argc] = strdup("auto"); + argc++; + } + if (opt >= ENABLE_MARKER && opt <= DISABLE_MARKER) { + args[argc] = args[argc - 2]; + args[argc - 2] = args[argc - 1]; + args[argc - 1] = strdup("auto"); + argc++; + } + args[argc] = NULL; + goto do_cli; default: fprintf(stderr, "Unknown option\n"); break; } } - cli_cmd = find_cli_cmd(argv[optind]); +do_cli: + cli_cmd = find_cli_cmd(args[optind]); if (!cli_cmd) { fprintf(stderr, "No such command %s\n", - argv[optind]); + args[optind]); exit(EXIT_FAILURE); } - cli_dispatch_cmd(cli_cmd, argc - optind, &argv[optind]); + cli_dispatch_cmd(cli_cmd, argc - optind, &args[optind]); return 0; } @@ -158,6 +213,25 @@ static int get_sock_path(int argc, char *argv[]) return 0; } +static int list_pids(int argc, char *argv[]) +{ + pid_t *pid_list; + int i; + + pid_list = ustctl_get_online_pids(); + if (!pid_list) { + return -1; + } + + for (i = 0; pid_list[i]; i++) { + printf("%ld\n", (long)pid_list[i]); + } + + free(pid_list); + + return 0; +} + struct cli_cmd __cli_cmds general_cmds[] = { { .name = "list-trace-events", @@ -186,4 +260,13 @@ struct cli_cmd __cli_cmds general_cmds[] = { .desired_args = 1, .desired_args_op = CLI_EQ, }, + { + .name = "list-pids", + .description = "List traceable pids", + .help_text = "list-pids\n" + "List the traceable pids for the current user\n", + .function = list_pids, + .desired_args = 0, + .desired_args_op = CLI_EQ, + }, };