| // SPDX-License-Identifier: GPL-2.0 |
| /* |
| * Copyright (C) 2022 Google Inc, Steven Rostedt <rostedt@goodmis.org> |
| */ |
| #include "ktrace.h" |
| |
| #define EXEC_NAME "ktrace" |
| |
| static void usage(char **argv) |
| { |
| printf("usage: %s\n" |
| "\n", EXEC_NAME); |
| exit(-1); |
| } |
| |
| static void __vdie(const char *fmt, va_list ap, int err) |
| { |
| int ret = errno; |
| |
| if (err && errno) |
| perror(EXEC_NAME); |
| else |
| ret = -1; |
| |
| fprintf(stderr, " "); |
| vfprintf(stderr, fmt, ap); |
| |
| fprintf(stderr, "\n"); |
| exit(ret); |
| } |
| |
| void pdie(const char *fmt, ...) |
| { |
| va_list ap; |
| |
| va_start(ap, fmt); |
| __vdie(fmt, ap, 1); |
| va_end(ap); |
| } |
| |
| int main (int argc, char **argv) |
| { |
| struct ccli *ccli; |
| struct tep_handle *tep; |
| |
| tep = tracefs_local_events(NULL); |
| if (!tep) { |
| if (errno == EPERM) |
| pdie("Failed to initialize tracing directory.\n" |
| " You do not have permission to read it"); |
| pdie("Failed to initialize tracing directory"); |
| } |
| ccli = ccli_alloc("ktrace> ", STDIN_FILENO, STDOUT_FILENO); |
| if (!ccli) |
| pdie("ccli initialization"); |
| |
| ccli_register_command(ccli, "create", cmd_create, tep); |
| ccli_register_completion(ccli, "create", create_completion); |
| |
| ccli_loop(ccli); |
| ccli_free(ccli); |
| |
| tep_free(tep); |
| |
| return 0; |
| } |