diff options
author | Scott Lobdell <slobdell@google.com> | 2020-11-05 18:29:12 -0800 |
---|---|---|
committer | Scott Lobdell <slobdell@google.com> | 2020-11-13 11:48:49 -0800 |
commit | 3933f277a025be704e68ea593536e492831a7e05 (patch) | |
tree | 084aa5e0858c449a63dd18cc57fb21ab054d363a /cmds/idmap2/libidmap2/RawPrintVisitor.cpp | |
parent | 248a6ce2e2ee65f367b01c43edeecef5a6d57581 (diff) | |
parent | 9c74513b2d828d5169e9942b58b2f93bb3e04aff (diff) |
Merge SP1A.201105.002
Change-Id: Iec83a0c1f6f286a1e51abfc4356633ca9d8aea5f
Diffstat (limited to 'cmds/idmap2/libidmap2/RawPrintVisitor.cpp')
-rw-r--r-- | cmds/idmap2/libidmap2/RawPrintVisitor.cpp | 85 |
1 files changed, 47 insertions, 38 deletions
diff --git a/cmds/idmap2/libidmap2/RawPrintVisitor.cpp b/cmds/idmap2/libidmap2/RawPrintVisitor.cpp index 3f62a2ae2029..82f5d26cbbb3 100644 --- a/cmds/idmap2/libidmap2/RawPrintVisitor.cpp +++ b/cmds/idmap2/libidmap2/RawPrintVisitor.cpp @@ -30,15 +30,6 @@ using android::ApkAssets; using android::idmap2::policy::PoliciesToDebugString; -namespace { - -size_t StringSizeWhenEncoded(const std::string& s) { - size_t null_bytes = 4 - (s.size() % 4); - return sizeof(uint32_t) + s.size() + null_bytes; -} - -} // namespace - namespace android::idmap2 { void RawPrintVisitor::visit(const Idmap& idmap ATTRIBUTE_UNUSED) { @@ -51,19 +42,24 @@ void RawPrintVisitor::visit(const IdmapHeader& header) { print(header.GetOverlayCrc(), "overlay crc"); print(header.GetFulfilledPolicies(), "fulfilled policies: %s", PoliciesToDebugString(header.GetFulfilledPolicies()).c_str()); - print(static_cast<uint8_t>(header.GetEnforceOverlayable()), "enforce overlayable"); + print(static_cast<uint32_t>(header.GetEnforceOverlayable()), "enforce overlayable"); print(header.GetTargetPath().to_string(), kIdmapStringLength, "target path"); print(header.GetOverlayPath().to_string(), kIdmapStringLength, "overlay path"); - print("...", StringSizeWhenEncoded(header.GetDebugInfo()), "debug info"); - target_apk_ = ApkAssets::Load(header.GetTargetPath().to_string()); + uint32_t debug_info_size = header.GetDebugInfo().size(); + print(debug_info_size, "debug info size"); + print("...", debug_info_size + CalculatePadding(debug_info_size), "debug info"); + + auto target_apk_ = ApkAssets::Load(header.GetTargetPath().to_string()); if (target_apk_) { target_am_.SetApkAssets({target_apk_.get()}); + apk_assets_.push_back(std::move(target_apk_)); } - overlay_apk_ = ApkAssets::Load(header.GetOverlayPath().to_string()); + auto overlay_apk_ = ApkAssets::Load(header.GetOverlayPath().to_string()); if (overlay_apk_) { overlay_am_.SetApkAssets({overlay_apk_.get()}); + apk_assets_.push_back(std::move(overlay_apk_)); } } @@ -82,18 +78,44 @@ void RawPrintVisitor::visit(const IdmapData& data ATTRIBUTE_UNUSED) { print(target_entry.target_id, "target id"); } - print(target_entry.data_type, "type: %s", - utils::DataTypeToString(target_entry.data_type).data()); + Result<std::string> overlay_name(Error("")); + if (overlay_package_loaded) { + overlay_name = utils::ResToTypeEntryName(overlay_am_, target_entry.overlay_id); + } + if (overlay_name) { + print(target_entry.overlay_id, "overlay id: %s", overlay_name->c_str()); + } else { + print(target_entry.overlay_id, "overlay id"); + } + } + + for (auto& target_entry : data.GetTargetInlineEntries()) { + Result<std::string> target_name(Error("")); + if (target_package_loaded) { + target_name = utils::ResToTypeEntryName(target_am_, target_entry.target_id); + } + if (target_name) { + print(target_entry.target_id, "target id: %s", target_name->c_str()); + } else { + print(target_entry.target_id, "target id"); + } + + print("...", sizeof(Res_value::size) + sizeof(Res_value::res0), "padding"); + + print(target_entry.value.data_type, "type: %s", + utils::DataTypeToString(target_entry.value.data_type).data()); Result<std::string> overlay_name(Error("")); - if (overlay_package_loaded && (target_entry.data_type == Res_value::TYPE_REFERENCE || - target_entry.data_type == Res_value::TYPE_DYNAMIC_REFERENCE)) { - overlay_name = utils::ResToTypeEntryName(overlay_am_, target_entry.data_value); + if (overlay_package_loaded && + (target_entry.value.data_value == Res_value::TYPE_REFERENCE || + target_entry.value.data_value == Res_value::TYPE_DYNAMIC_REFERENCE)) { + overlay_name = utils::ResToTypeEntryName(overlay_am_, target_entry.value.data_value); } + if (overlay_name) { - print(target_entry.data_value, "value: %s", overlay_name->c_str()); + print(target_entry.value.data_value, "data: %s", overlay_name->c_str()); } else { - print(target_entry.data_value, "value"); + print(target_entry.value.data_value, "data"); } } @@ -121,19 +143,19 @@ void RawPrintVisitor::visit(const IdmapData& data ATTRIBUTE_UNUSED) { } } - const size_t string_pool_length = data.GetHeader()->GetStringPoolLength(); - if (string_pool_length > 0) { - print_raw(string_pool_length, "%zu raw string pool bytes", string_pool_length); - } + uint32_t string_pool_size = data.GetStringPoolData().size(); + print(string_pool_size, "string pool size"); + print("...", string_pool_size + CalculatePadding(string_pool_size), "string pool"); } void RawPrintVisitor::visit(const IdmapData::Header& header) { print(header.GetTargetPackageId(), "target package id"); print(header.GetOverlayPackageId(), "overlay package id"); + print("...", sizeof(Idmap_data_header::p0), "padding"); print(header.GetTargetEntryCount(), "target entry count"); + print(header.GetTargetInlineEntryCount(), "target inline entry count"); print(header.GetOverlayEntryCount(), "overlay entry count"); print(header.GetStringPoolIndexOffset(), "string pool index offset"); - print(header.GetStringPoolLength(), "string pool byte length"); } // NOLINTNEXTLINE(cert-dcl50-cpp) @@ -190,17 +212,4 @@ void RawPrintVisitor::print(const std::string& value, size_t encoded_size, const offset_ += encoded_size; } -// NOLINTNEXTLINE(cert-dcl50-cpp) -void RawPrintVisitor::print_raw(uint32_t length, const char* fmt, ...) { - va_list ap; - va_start(ap, fmt); - std::string comment; - base::StringAppendV(&comment, fmt, ap); - va_end(ap); - - stream_ << base::StringPrintf("%08zx: ", offset_) << "........ " << comment << std::endl; - - offset_ += length; -} - } // namespace android::idmap2 |