summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Anderson <dvander@google.com>2018-11-13 15:27:37 -0800
committerandroid-build-merger <android-build-merger@google.com>2018-11-13 15:27:37 -0800
commit9142a366f3c2aa3bb7388554b7c5bf807b197ab7 (patch)
tree99b50f4c2a6c51e1be208fe6a3aa18f9cadeea6c
parent216f500efafd89713ffb06765b65199bfde647d6 (diff)
parent6560cc1a2a6835ad5f4c0a8422e13401bd24d807 (diff)
downloadextras-9142a366f3c2aa3bb7388554b7c5bf807b197ab7.tar.gz
Merge "lpdump: Allow reading local partition images." am: 82f21a000d
am: 6560cc1a2a Change-Id: I1e8cf8366178d8fcb7e8da4a5d0da843d88ebb71
-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);
}