diff options
author | MÃ¥rten Kongstad <marten.kongstad@sony.com> | 2018-12-04 14:36:48 +0100 |
---|---|---|
committer | Todd Kennedy <toddke@google.com> | 2018-12-17 15:20:48 -0800 |
commit | ef0695d78fbd3bffef15cd09fa2f6a96ab793edc (patch) | |
tree | 3cdfcd96fdc4d5d3c3e36603f52e9c6b4282f801 /cmds/idmap2/idmap2d/Idmap2Service.cpp | |
parent | 2ffad2ba3a9ec3cd0082e951bcb6dfe48fa3e2f4 (diff) |
OMS: extract verifyIdmap from createIdmap
For clarity, split IIdmap2::createIdmap into two separate functions:
- IIdmap2::verifyIdmap [check if an existing idmap file is OK to use]
- IIdmap2::createIdmap [unconditionally (re)create an idmap file]
Teach the IdmapManager to call verifyIdmap and to proceed with
createIdmap only if actually needed.
Test: atest OverlayDeviceTests OverlayHostTests
Change-Id: I9f6f1192011fcb094adffeca1eb3f709520bbd24
Diffstat (limited to 'cmds/idmap2/idmap2d/Idmap2Service.cpp')
-rw-r--r-- | cmds/idmap2/idmap2d/Idmap2Service.cpp | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/cmds/idmap2/idmap2d/Idmap2Service.cpp b/cmds/idmap2/idmap2d/Idmap2Service.cpp index cf72cb94da2c..86b00f1d6e95 100644 --- a/cmds/idmap2/idmap2d/Idmap2Service.cpp +++ b/cmds/idmap2/idmap2d/Idmap2Service.cpp @@ -78,6 +78,18 @@ Status Idmap2Service::removeIdmap(const std::string& overlay_apk_path, } } +Status Idmap2Service::verifyIdmap(const std::string& overlay_apk_path, + int32_t user_id ATTRIBUTE_UNUSED, bool* _aidl_return) { + assert(_aidl_return); + const std::string idmap_path = Idmap::CanonicalIdmapPathFor(kIdmapCacheDir, overlay_apk_path); + std::ifstream fin(idmap_path); + const std::unique_ptr<const IdmapHeader> header = IdmapHeader::FromBinaryStream(fin); + fin.close(); + std::stringstream dev_null; + *_aidl_return = header && header->IsUpToDate(dev_null); + return ok(); +} + Status Idmap2Service::createIdmap(const std::string& target_apk_path, const std::string& overlay_apk_path, int32_t user_id, std::unique_ptr<std::string>* _aidl_return) { @@ -90,17 +102,6 @@ Status Idmap2Service::createIdmap(const std::string& target_apk_path, _aidl_return->reset(nullptr); - const std::string idmap_path = Idmap::CanonicalIdmapPathFor(kIdmapCacheDir, overlay_apk_path); - std::ifstream fin(idmap_path); - const std::unique_ptr<const IdmapHeader> header = IdmapHeader::FromBinaryStream(fin); - fin.close(); - // do not reuse error stream from IsUpToDate below, or error messages will be - // polluted with irrelevant data - std::stringstream dev_null; - if (header && header->IsUpToDate(dev_null)) { - return ok(); - } - const std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path); if (!target_apk) { return error("failed to load apk " + target_apk_path); @@ -119,6 +120,7 @@ Status Idmap2Service::createIdmap(const std::string& target_apk_path, } umask(0133); // u=rw,g=r,o=r + const std::string idmap_path = Idmap::CanonicalIdmapPathFor(kIdmapCacheDir, overlay_apk_path); std::ofstream fout(idmap_path); if (fout.fail()) { return error("failed to open idmap path " + idmap_path); |