X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-crash%2Flttng-crash.c;h=13d136da96e845e8c78e23870caa507b7e708f3e;hp=5ca85f3bd01dcc6bdb2a5a4121a07592c09d11d0;hb=6ef14df598d5dd29452112a1c2e52c700865d63a;hpb=afe4fd7ca14c0ae4f36f034aa69e0e7a9cdf1b4b diff --git a/src/bin/lttng-crash/lttng-crash.c b/src/bin/lttng-crash/lttng-crash.c index 5ca85f3bd..13d136da9 100644 --- a/src/bin/lttng-crash/lttng-crash.c +++ b/src/bin/lttng-crash/lttng-crash.c @@ -16,7 +16,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#define _GNU_SOURCE #include #include #include @@ -29,7 +28,6 @@ #include #include #include -#include #include #include #include @@ -39,6 +37,7 @@ #include #include #include +#include #define DEFAULT_VIEWER "babeltrace" @@ -184,8 +183,8 @@ struct lttng_crash_layout { /* Variables */ static char *progname, - *opt_viewer_path = DEFAULT_VIEWER, - *opt_output_path; + *opt_viewer_path = NULL, + *opt_output_path = NULL; static char *input_path; @@ -206,27 +205,15 @@ static struct option long_options[] = { { NULL, 0, NULL, 0 }, }; -static void usage(FILE *ofp) +static void usage(void) { - fprintf(ofp, "LTTng Crash Trace Viewer " VERSION " - " VERSION_NAME "%s\n\n", - GIT_VERSION[0] == '\0' ? "" : " - " GIT_VERSION); - fprintf(ofp, "usage: lttng-crash [OPTIONS] FILE\n"); - fprintf(ofp, "\n"); - fprintf(ofp, "Options:\n"); - fprintf(ofp, " -V, --version Show version.\n"); - fprintf(ofp, " -h, --help Show this help.\n"); - fprintf(ofp, " --list-options Simple listing of lttng-crash options.\n"); - fprintf(ofp, " -v, --verbose Increase verbosity.\n"); - fprintf(ofp, " -e, --viewer Specify viewer and/or options to use. This will\n" - " completely override the default viewers so please\n" - " make sure to specify the full command. The trace\n" - " directory paths appended at the end to the\n" - " arguments.\n"); - fprintf(ofp, " -x, --extract PATH Extract trace(s) to specified path. Don't view\n" - " trace.\n"); - fprintf(ofp, "\n"); - fprintf(ofp, "Please see the lttng-crash(1) man page for full documentation.\n"); - fprintf(ofp, "See http://lttng.org for updates, bug reports and news.\n"); + int ret = utils_show_man_page(1, "lttng-crash"); + + if (ret) { + ERR("Cannot view man page lttng-crash(1)"); + perror("exec"); + exit(EXIT_FAILURE); + } } static void version(FILE *ofp) @@ -271,18 +258,18 @@ static int parse_args(int argc, char **argv) int opt, ret = 0; if (argc < 2) { - usage(stderr); + usage(); exit(EXIT_FAILURE); } - while ((opt = getopt_long(argc, argv, "+Vhvex:", long_options, NULL)) != -1) { + while ((opt = getopt_long(argc, argv, "+Vhve:x:", long_options, NULL)) != -1) { switch (opt) { case 'V': version(stdout); ret = 1; goto end; case 'h': - usage(stdout); + usage(); ret = 1; goto end; case 'v': @@ -292,9 +279,11 @@ static int parse_args(int argc, char **argv) } break; case 'e': + free(opt_viewer_path); opt_viewer_path = strdup(optarg); break; case 'x': + free(opt_output_path); opt_output_path = strdup(optarg); break; case OPT_DUMP_OPTIONS: @@ -302,14 +291,18 @@ static int parse_args(int argc, char **argv) ret = 1; goto end; default: - usage(stderr); + ERR("Unknown command-line option"); goto error; } } + if (!opt_viewer_path) { + opt_viewer_path = DEFAULT_VIEWER; + } + /* No leftovers, or more than one input path, print usage and quit */ - if ((argc - optind) == 0 || (argc - optind) > 1) { - usage(stderr); + if (argc - optind != 1) { + ERR("Command-line error: Specify exactly one input path"); goto error; } @@ -662,7 +655,7 @@ int copy_crash_subbuf(const struct lttng_crash_layout *layout, return -EINVAL; } - DBG("Copy crash subbuffer at offset %lu", offset); + DBG("Copy crash subbuffer at offset %" PRIu64, offset); sbidx = subbuf_index(offset, buf_size, subbuf_size); /* @@ -1028,6 +1021,7 @@ int extract_trace_recursive(const char *output_path, break; } case DT_REG: + case DT_LNK: if (!strcmp(entry->d_name, "metadata")) { ret = extract_one_trace(output_path, input_path);