summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2018-11-13 22:50:47 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-11-13 22:50:47 +0000
commit82f21a000d5e3d2c770ad544e18a0353d50a5aff (patch)
tree99b50f4c2a6c51e1be208fe6a3aa18f9cadeea6c
parent2da01f61fd7f7765477e56244dfada608a607f01 (diff)
parent8a403a824e30279ca55747f78a7ac338c4ffc10c (diff)
downloadextras-82f21a000d5e3d2c770ad544e18a0353d50a5aff.tar.gz
Merge "lpdump: Allow reading local partition images."
-rw-r--r--partition_tools/lpdump.cc15
1 files changed, 14 insertions, 1 deletions
diff --git a/partition_tools/lpdump.cc b/partition_tools/lpdump.cc
index e3689d23..8afb13e1 100644
--- a/partition_tools/lpdump.cc
+++ b/partition_tools/lpdump.cc
@@ -57,6 +57,18 @@ static bool IsBlockDevice(const char* file) {
return !stat(file, &s) && S_ISBLK(s.st_mode);
}
+class FileOrBlockDeviceOpener final : public PartitionOpener {
+public:
+ android::base::unique_fd Open(const std::string& path, int flags) const override {
+ // Try a local file first.
+ android::base::unique_fd fd(open(path.c_str(), flags));
+ if (fd >= 0) {
+ return fd;
+ }
+ return PartitionOpener::Open(path, flags);
+ }
+};
+
int main(int argc, char* argv[]) {
struct option options[] = {
{ "slot", required_argument, nullptr, 's' },
@@ -84,7 +96,8 @@ int main(int argc, char* argv[]) {
}
const char* file = argv[optind++];
- auto pt = ReadMetadata(file, slot);
+ FileOrBlockDeviceOpener opener;
+ auto pt = ReadMetadata(opener, file, slot);
if (!pt && !IsBlockDevice(file)) {
pt = ReadFromImageFile(file);
}