Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7fb0a06 authored by Mark Salyzyn's avatar Mark Salyzyn
Browse files

logcat: Add -h and --help flags

If -h or --help argument was supplied, logcat would report the help
message but also return an error.  Officially add -h and --help as
recognized flags, report all help with a (zero) success error code.
Adding this, and the associated test, was split off as a stepping
stone to resolving an issue with logcat -L or --last flag operations.

Test: gTest logcat-unit-tests --gtest_filter=*.help
Bug: 28788401
Bug: 30041146
Bug: 30612424
Bug: 35326290
Change-Id: I948e7fa4e92bd23f52717758ffd96bbd068c53d4
parent 210be382
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -882,6 +882,7 @@ static int __logcat(android_logcat_context_internal* context) {
          { "grep",          required_argument, nullptr, 'e' },
          // hidden and undocumented reserved alias for --max-count
          { "head",          required_argument, nullptr, 'm' },
          { "help",          no_argument,       nullptr, 'h' },
          { id_str,          required_argument, nullptr, 0 },
          { "last",          no_argument,       nullptr, 'L' },
          { "max-count",     required_argument, nullptr, 'm' },
@@ -900,9 +901,8 @@ static int __logcat(android_logcat_context_internal* context) {
        };
        // clang-format on

        ret = getopt_long_r(argc, argv,
                            ":cdDLt:T:gG:sQf:r:n:v:b:BSpP:m:e:", long_options,
                            &option_index, &optctx);
        ret = getopt_long_r(argc, argv, ":cdDhLt:T:gG:sQf:r:n:v:b:BSpP:m:e:",
                            long_options, &option_index, &optctx);
        if (ret < 0) break;

        switch (ret) {
@@ -1304,6 +1304,11 @@ static int __logcat(android_logcat_context_internal* context) {
                             "Option -%c needs an argument\n", optctx.optopt);
                goto exit;

            case 'h':
                show_help(context);
                show_format_help(context);
                goto exit;

            default:
                logcat_panic(context, HELP_TRUE, "Unrecognized Option %c\n",
                             optctx.optopt);
+19 −0
Original line number Diff line number Diff line
@@ -1668,3 +1668,22 @@ TEST(logcat, security) {
    EXPECT_TRUE(reportedSecurity("logcat -b security -c 2>&1"));
    EXPECT_TRUE(reportedSecurity("logcat -b security -G 256K 2>&1"));
}

static size_t commandOutputSize(const char* command) {
    logcat_define(ctx);
    FILE* fp = logcat_popen(ctx, command);
    if (!fp) return 0;

    std::string ret;
    if (!android::base::ReadFdToString(fileno(fp), &ret)) return 0;
    if (logcat_pclose(ctx, fp) != 0) return 0;

    return ret.size();
}

TEST(logcat, help) {
    size_t logcatHelpTextSize = commandOutputSize("logcat -h 2>&1");
    EXPECT_LT(4096UL, logcatHelpTextSize);
    size_t logcatLastHelpTextSize = commandOutputSize("logcat -L -h 2>&1");
    EXPECT_EQ(logcatHelpTextSize, logcatLastHelpTextSize);
}