From adc0b87ec235a71d722fb8d6aad50ceaeac8c6d5 Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Thu, 8 Feb 2018 22:35:21 -0800 Subject: AssetManager2: Fix list function List was skipping directories. Include them, and add tests to ensure the order and precedence is correct. Bug: 72511641 Test: make libandroidfw_tests Test: atest CtsContentTestCases:AssetManagerTest Change-Id: Iadf45883283d3e4aae93bd7c3343745912e34fa0 --- libs/androidfw/ApkAssets.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'libs/androidfw/ApkAssets.cpp') diff --git a/libs/androidfw/ApkAssets.cpp b/libs/androidfw/ApkAssets.cpp index da0205d72125..60f8a1833919 100644 --- a/libs/androidfw/ApkAssets.cpp +++ b/libs/androidfw/ApkAssets.cpp @@ -231,12 +231,16 @@ bool ApkAssets::ForEachFile(const std::string& root_path, while ((result = ::Next(cookie, &entry, &name)) == 0) { StringPiece full_file_path(reinterpret_cast(name.name), name.name_length); StringPiece leaf_file_path = full_file_path.substr(root_path_full.size()); - auto iter = std::find(leaf_file_path.begin(), leaf_file_path.end(), '/'); - if (iter != leaf_file_path.end()) { - dirs.insert( - leaf_file_path.substr(0, std::distance(leaf_file_path.begin(), iter)).to_string()); - } else if (!leaf_file_path.empty()) { - f(leaf_file_path, kFileTypeRegular); + + if (!leaf_file_path.empty()) { + auto iter = std::find(leaf_file_path.begin(), leaf_file_path.end(), '/'); + if (iter != leaf_file_path.end()) { + std::string dir = + leaf_file_path.substr(0, std::distance(leaf_file_path.begin(), iter)).to_string(); + dirs.insert(std::move(dir)); + } else { + f(leaf_file_path, kFileTypeRegular); + } } } ::EndIteration(cookie); -- cgit v1.2.3-59-g8ed1b