Loading cmds/dumpsys/dumpsys.cpp +38 −4 Original line number Diff line number Diff line Loading @@ -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[]) Loading @@ -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; Loading @@ -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])); Loading @@ -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; } } } Loading @@ -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) { Loading Loading
cmds/dumpsys/dumpsys.cpp +38 −4 Original line number Diff line number Diff line Loading @@ -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[]) Loading @@ -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; Loading @@ -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])); Loading @@ -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; } } } Loading @@ -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) { Loading