diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2018-11-13 22:50:47 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2018-11-13 22:50:47 +0000 |
commit | 82f21a000d5e3d2c770ad544e18a0353d50a5aff (patch) | |
tree | 99b50f4c2a6c51e1be208fe6a3aa18f9cadeea6c | |
parent | 2da01f61fd7f7765477e56244dfada608a607f01 (diff) | |
parent | 8a403a824e30279ca55747f78a7ac338c4ffc10c (diff) | |
download | extras-82f21a000d5e3d2c770ad544e18a0353d50a5aff.tar.gz |
Merge "lpdump: Allow reading local partition images."
-rw-r--r-- | partition_tools/lpdump.cc | 15 |
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); } |