From d1ecd7af687bcad0f87c37fe33515ff6c5ea0f1d Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Mon, 23 Jan 2017 12:58:11 -0800 Subject: AssetManager2: Various fixes - Use FileMaps to open Assets (prevents closing of ApkAssets underlying zip) - Implement OpenDir and List methods - Fix issue where DynamicRefTable wasn't properly constructed Test: make libandroidfw_tests Change-Id: Ib21a84e1114d028120744aa3bc1c6eb9d9399fa8 --- libs/androidfw/Asset.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'libs/androidfw/Asset.cpp') diff --git a/libs/androidfw/Asset.cpp b/libs/androidfw/Asset.cpp index 8e8c6a2e25a2..247458d3f4fd 100644 --- a/libs/androidfw/Asset.cpp +++ b/libs/androidfw/Asset.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -298,6 +299,22 @@ Asset::Asset(void) return pAsset; } +/*static*/ std::unique_ptr Asset::createFromUncompressedMap(std::unique_ptr dataMap, + AccessMode mode) +{ + std::unique_ptr<_FileAsset> pAsset = util::make_unique<_FileAsset>(); + + status_t result = pAsset->openChunk(dataMap.get()); + if (result != NO_ERROR) { + return NULL; + } + + // We succeeded, so relinquish control of dataMap + (void) dataMap.release(); + pAsset->mAccessMode = mode; + return std::move(pAsset); +} + /* * Create a new Asset from compressed data in a memory mapping. */ @@ -316,6 +333,21 @@ Asset::Asset(void) return pAsset; } +/*static*/ std::unique_ptr Asset::createFromCompressedMap(std::unique_ptr dataMap, + size_t uncompressedLen, AccessMode mode) +{ + std::unique_ptr<_CompressedAsset> pAsset = util::make_unique<_CompressedAsset>(); + + status_t result = pAsset->openChunk(dataMap.get(), uncompressedLen); + if (result != NO_ERROR) { + return NULL; + } + + // We succeeded, so relinquish control of dataMap + (void) dataMap.release(); + pAsset->mAccessMode = mode; + return std::move(pAsset); +} /* * Do generic seek() housekeeping. Pass in the offset/whence values from -- cgit v1.2.3-59-g8ed1b