diff options
-rw-r--r-- | dumpstate/Dumpstate.cpp | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/dumpstate/Dumpstate.cpp b/dumpstate/Dumpstate.cpp index adf51b4..af913fd 100644 --- a/dumpstate/Dumpstate.cpp +++ b/dumpstate/Dumpstate.cpp @@ -246,6 +246,7 @@ Dumpstate::Dumpstate() // if the specified section is not supported. void Dumpstate::dumpTextSection(int fd, const std::string §ionName) { bool dumpAll = (sectionName == kAllSections); + std::string dumpFiles; for (const auto §ion : mTextSections) { if (dumpAll || sectionName == section.first) { @@ -259,22 +260,29 @@ void Dumpstate::dumpTextSection(int fd, const std::string §ionName) { } } - // Execute all programs under vendor/bin/dump/ + // Execute all or designated programs under vendor/bin/dump/ std::unique_ptr<DIR, decltype(&closedir)> dir(opendir("/vendor/bin/dump"), closedir); if (!dir) { - ALOGE("Fail To Open Dir vendor/bin/dump/"); - } else { - dirent *entry; - while ((entry = readdir(dir.get())) != nullptr) { + ALOGE("Fail To Open Dir vendor/bin/dump/"); + ::android::base::WriteStringToFd("Fail To Open Dir vendor/bin/dump/\n", fd); + return; + } + dirent *entry; + while ((entry = readdir(dir.get())) != nullptr) { // Skip '.', '..' if (entry->d_name[0] == '.') { - continue; + continue; } std::string bin(entry->d_name); - auto startTime = startSection(fd, "/vendor/bin/dump/"+bin); - RunCommandToFd(fd, "/vendor/bin/dump/"+bin, {"/vendor/bin/dump/"+bin}); - endSection(fd, "/vendor/bin/dump/"+bin, startTime); - } + dumpFiles = dumpFiles + " " + bin; + if (dumpAll || sectionName == bin) { + auto startTime = startSection(fd, bin); + RunCommandToFd(fd, "/vendor/bin/dump/"+bin, {"/vendor/bin/dump/"+bin}); + endSection(fd, bin, startTime); + if (!dumpAll) { + return; + } + } } if (dumpAll) { @@ -287,6 +295,7 @@ void Dumpstate::dumpTextSection(int fd, const std::string §ionName) { for (const auto §ion : mTextSections) { ::android::base::WriteStringToFd(" " + section.first, fd); } + ::android::base::WriteStringToFd(dumpFiles, fd); ::android::base::WriteStringToFd("\nNote: sections with attachments (e.g. modem) are" "not avalable from the command line.\n", fd); } |