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

Commit 27eabcc8 authored by Felipe Leme's avatar Felipe Leme Committed by Android (Google) Code Review
Browse files

Merge "Added --skip option to skip services."

parents 85b3c70e 859aef6a
Loading
Loading
Loading
Loading
+38 −4
Original line number Diff line number Diff line
@@ -31,10 +31,20 @@ static void usage() {
        "usage: dumpsys\n"
            "         To dump all services.\n"
            "or:\n"
            "       dumpsys [--help | -l | SERVICE [ARGS]]\n"
            "       dumpsys [--help | -l | --skip SERVICES | SERVICE [ARGS]]\n"
            "         --help: shows this help\n"
            "         -l: only list services, do not dump them\n"
            "         SERVICE: dumps only service SERVICE, optionally passing ARGS to it\n");
            "         --skip SERVICES: dumps all services but SERVICES (comma-separated list)\n"
            "         SERVICE [ARGS]: dumps only service SERVICE, optionally passing ARGS to it\n");
}

bool IsSkipped(const Vector<String16>& skipped, const String16& service) {
    for (const auto& candidate : skipped) {
        if (candidate == service) {
            return true;
        }
    }
    return false;
}

int main(int argc, char* const argv[])
@@ -50,8 +60,10 @@ int main(int argc, char* const argv[])

    Vector<String16> services;
    Vector<String16> args;
    Vector<String16> skippedServices;
    bool showListOnly = false;
    if (argc == 2) {
        // 1 argument: check for special cases (-l or --help)
        if (strcmp(argv[1], "--help") == 0) {
            usage();
            return 0;
@@ -60,11 +72,30 @@ int main(int argc, char* const argv[])
            showListOnly = true;
        }
    }
    if ((argc == 1) || showListOnly) {
    if (argc == 3) {
        // 2 arguments: check for special cases (--skip SERVICES)
        if (strcmp(argv[1], "--skip") == 0) {
            char* token = strtok(argv[2], ",");
            while (token != NULL) {
                skippedServices.add(String16(token));
                token = strtok(NULL, ",");
            }
        }
    }
    bool dumpAll = argc == 1;
    if (dumpAll || !skippedServices.empty() || showListOnly) {
        // gets all services
        services = sm->listServices();
        services.sort(sort_func);
        args.add(String16("-a"));
    } else {
        // gets a specific service:
        // first check if its name is not a special argument...
        if (strcmp(argv[1], "--skip") == 0 || strcmp(argv[1], "-l") == 0) {
            usage();
            return -1;
        }
        // ...then gets its arguments
        services.add(String16(argv[1]));
        for (int i=2; i<argc; i++) {
            args.add(String16(argv[i]));
@@ -80,7 +111,8 @@ int main(int argc, char* const argv[])
        for (size_t i=0; i<N; i++) {
            sp<IBinder> service = sm->checkService(services[i]);
            if (service != NULL) {
                aout << "  " << services[i] << endl;
                bool skipped = IsSkipped(skippedServices, services[i]);
                aout << "  " << services[i] << (skipped ? " (skipped)" : "") << endl;
            }
        }
    }
@@ -90,6 +122,8 @@ int main(int argc, char* const argv[])
    }

    for (size_t i=0; i<N; i++) {
        if (IsSkipped(skippedServices, services[i])) continue;

        sp<IBinder> service = sm->checkService(services[i]);
        if (service != NULL) {
            if (N > 1) {