Loading cmds/dumpstate/dumpstate.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -1654,6 +1654,7 @@ static void ShowUsage() { "progress (requires -o and -B)\n" " -R: take bugreport in remote mode (requires -o, -z, -d and -B, " "shouldn't be used with -P)\n" " -w: start binder service and make it wait for a call to startBugreport\n" " -v: prints the dumpstate header and exit\n"); } Loading Loading @@ -2112,7 +2113,7 @@ void Dumpstate::DumpOptions::Initialize(BugreportMode bugreport_mode, Dumpstate::RunStatus Dumpstate::DumpOptions::Initialize(int argc, char* argv[]) { RunStatus status = RunStatus::OK; int c; while ((c = getopt(argc, argv, "dho:svqzpPBRSV:")) != -1) { while ((c = getopt(argc, argv, "dho:svqzpPBRSV:w")) != -1) { switch (c) { // clang-format off case 'd': do_add_date = true; break; Loading @@ -2129,6 +2130,9 @@ Dumpstate::RunStatus Dumpstate::DumpOptions::Initialize(int argc, char* argv[]) case 'R': is_remote_mode = true; break; case 'B': do_broadcast = true; break; case 'V': break; // compatibility no-op case 'w': // This was already processed break; case 'h': status = RunStatus::HELP; break; Loading cmds/dumpstate/dumpstate.rc +6 −0 Original line number Diff line number Diff line Loading @@ -17,3 +17,9 @@ service dumpstatez /system/bin/dumpstate -S -d -z \ class main disabled oneshot # bugreportd starts dumpstate binder service and makes it wait for a listener to connect. service bugreportd /system/bin/dumpstate -w class main disabled oneshot cmds/dumpstate/main.cpp +48 −1 Original line number Diff line number Diff line Loading @@ -14,8 +14,55 @@ * limitations under the License. */ #define LOG_TAG "dumpstate" #include <binder/IPCThreadState.h> #include "DumpstateInternal.h" #include "DumpstateService.h" #include "dumpstate.h" namespace { // Returns true if we should start the service and wait for a listener // to bind with bugreport options. bool ShouldStartServiceAndWait(int argc, char* argv[]) { bool do_wait = false; int c; // Keep flags in sync with Dumpstate::DumpOptions::Initialize. while ((c = getopt(argc, argv, "wdho:svqzpPBRSV:")) != -1 && !do_wait) { switch (c) { case 'w': do_wait = true; break; default: // Ignore all other options break; } } // Reset next index used by getopt so getopt can be called called again in Dumpstate::Run to // parse bugreport options. optind = 1; return do_wait; } } // namespace int main(int argc, char* argv[]) { if (ShouldStartServiceAndWait(argc, argv)) { int ret; if ((ret = android::os::DumpstateService::Start()) != android::OK) { MYLOGE("Unable to start 'dumpstate' service: %d", ret); exit(1); } MYLOGI("'dumpstate' service started and will wait for a call to startBugreport()"); // Waits forever for an incoming connection. // TODO(b/111441001): should this time out? android::IPCThreadState::self()->joinThreadPool(); return 0; } else { return run_main(argc, argv); } } Loading
cmds/dumpstate/dumpstate.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -1654,6 +1654,7 @@ static void ShowUsage() { "progress (requires -o and -B)\n" " -R: take bugreport in remote mode (requires -o, -z, -d and -B, " "shouldn't be used with -P)\n" " -w: start binder service and make it wait for a call to startBugreport\n" " -v: prints the dumpstate header and exit\n"); } Loading Loading @@ -2112,7 +2113,7 @@ void Dumpstate::DumpOptions::Initialize(BugreportMode bugreport_mode, Dumpstate::RunStatus Dumpstate::DumpOptions::Initialize(int argc, char* argv[]) { RunStatus status = RunStatus::OK; int c; while ((c = getopt(argc, argv, "dho:svqzpPBRSV:")) != -1) { while ((c = getopt(argc, argv, "dho:svqzpPBRSV:w")) != -1) { switch (c) { // clang-format off case 'd': do_add_date = true; break; Loading @@ -2129,6 +2130,9 @@ Dumpstate::RunStatus Dumpstate::DumpOptions::Initialize(int argc, char* argv[]) case 'R': is_remote_mode = true; break; case 'B': do_broadcast = true; break; case 'V': break; // compatibility no-op case 'w': // This was already processed break; case 'h': status = RunStatus::HELP; break; Loading
cmds/dumpstate/dumpstate.rc +6 −0 Original line number Diff line number Diff line Loading @@ -17,3 +17,9 @@ service dumpstatez /system/bin/dumpstate -S -d -z \ class main disabled oneshot # bugreportd starts dumpstate binder service and makes it wait for a listener to connect. service bugreportd /system/bin/dumpstate -w class main disabled oneshot
cmds/dumpstate/main.cpp +48 −1 Original line number Diff line number Diff line Loading @@ -14,8 +14,55 @@ * limitations under the License. */ #define LOG_TAG "dumpstate" #include <binder/IPCThreadState.h> #include "DumpstateInternal.h" #include "DumpstateService.h" #include "dumpstate.h" namespace { // Returns true if we should start the service and wait for a listener // to bind with bugreport options. bool ShouldStartServiceAndWait(int argc, char* argv[]) { bool do_wait = false; int c; // Keep flags in sync with Dumpstate::DumpOptions::Initialize. while ((c = getopt(argc, argv, "wdho:svqzpPBRSV:")) != -1 && !do_wait) { switch (c) { case 'w': do_wait = true; break; default: // Ignore all other options break; } } // Reset next index used by getopt so getopt can be called called again in Dumpstate::Run to // parse bugreport options. optind = 1; return do_wait; } } // namespace int main(int argc, char* argv[]) { if (ShouldStartServiceAndWait(argc, argv)) { int ret; if ((ret = android::os::DumpstateService::Start()) != android::OK) { MYLOGE("Unable to start 'dumpstate' service: %d", ret); exit(1); } MYLOGI("'dumpstate' service started and will wait for a call to startBugreport()"); // Waits forever for an incoming connection. // TODO(b/111441001): should this time out? android::IPCThreadState::self()->joinThreadPool(); return 0; } else { return run_main(argc, argv); } }