X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=cli%2Fcli_dump.cpp;h=e30f6cc2b49574a00d58a111b38c82b59ca0982f;hb=f5f7f7ff4f2af0cc920b3cdc72258a0c02ca1db5;hp=3f393ce18aefcf46aa9a720c993635c1633c6226;hpb=689b6b2121e09d08437aab87b528e4c1de327d1c;p=apitrace diff --git a/cli/cli_dump.cpp b/cli/cli_dump.cpp index 3f393ce..e30f6cc 100644 --- a/cli/cli_dump.cpp +++ b/cli/cli_dump.cpp @@ -28,6 +28,9 @@ #include #include // for CHAR_MAX #include +#ifndef _WIN32 +#include // for isatty() +#endif #include "cli.hpp" #include "cli_pager.hpp" @@ -35,6 +38,7 @@ #include "trace_parser.hpp" #include "trace_dump.hpp" #include "trace_callset.hpp" +#include "trace_option.hpp" enum ColorOption { @@ -64,8 +68,9 @@ usage(void) " --color[=WHEN]\n" " --colour[=WHEN] colored syntax highlighting\n" " WHEN is 'auto', 'always', or 'never'\n" - " --arg-names[=BOOL] dump argument names [default: yes]\n" " --thread-ids=[=BOOL] dump thread ids [default: no]\n" + " --call-nos[=BOOL] dump call numbers[default: yes]\n" + " --arg-names[=BOOL] dump argument names [default: yes]\n" "\n" ; } @@ -73,8 +78,9 @@ usage(void) enum { CALLS_OPT = CHAR_MAX + 1, COLOR_OPT, - ARG_NAMES_OPT, THREAD_IDS_OPT, + CALL_NOS_OPT, + ARG_NAMES_OPT, }; const static char * @@ -87,40 +93,18 @@ longOptions[] = { {"calls", required_argument, 0, CALLS_OPT}, {"colour", optional_argument, 0, COLOR_OPT}, {"color", optional_argument, 0, COLOR_OPT}, - {"arg-names", optional_argument, 0, ARG_NAMES_OPT}, {"thread-ids", optional_argument, 0, THREAD_IDS_OPT}, + {"call-nos", optional_argument, 0, CALL_NOS_OPT}, + {"arg-names", optional_argument, 0, ARG_NAMES_OPT}, {0, 0, 0, 0} }; -static bool -boolOption(const char *option, bool default_ = true) { - if (!option) { - return default_; - } - if (strcmp(option, "0") == 0 || - strcmp(option, "no") == 0 || - strcmp(option, "false") == 0) { - return false; - } - if (strcmp(option, "0") == 0 || - strcmp(option, "yes") == 0 || - strcmp(option, "true") == 0) { - return true; - } - std::cerr << "error: unexpected bool " << option << "\n"; - return default_; -} - static int command(int argc, char *argv[]) { trace::DumpFlags dumpFlags = 0; bool dumpThreadIds = false; - // FIXME: avoid hacking around argc / argv - argc += 1; - argv = &argv[-1]; - int opt; while ((opt = getopt_long(argc, argv, shortOptions, longOptions, NULL)) != -1) { switch (opt) { @@ -146,16 +130,23 @@ command(int argc, char *argv[]) return 1; } break; + case THREAD_IDS_OPT: + dumpThreadIds = trace::boolOption(optarg); + break; + case CALL_NOS_OPT: + if (trace::boolOption(optarg)) { + dumpFlags &= ~trace::DUMP_FLAG_NO_CALL_NO; + } else { + dumpFlags |= trace::DUMP_FLAG_NO_CALL_NO; + } + break; case ARG_NAMES_OPT: - if (boolOption(optarg)) { + if (trace::boolOption(optarg)) { dumpFlags &= ~trace::DUMP_FLAG_NO_ARG_NAMES; } else { dumpFlags |= trace::DUMP_FLAG_NO_ARG_NAMES; } break; - case THREAD_IDS_OPT: - dumpThreadIds = boolOption(optarg, true); - break; default: std::cerr << "error: unexpected option `" << opt << "`\n"; usage(); @@ -180,7 +171,6 @@ command(int argc, char *argv[]) trace::Parser p; if (!p.open(argv[i])) { - std::cerr << "error: failed to open " << argv[i] << "\n"; return 1; }