summaryrefslogtreecommitdiff
path: root/cmds/idmap/idmap.cpp
diff options
context:
space:
mode:
author Jaekyun Seok <jaekyun@google.com> 2017-05-18 00:10:57 +0900
committer Jaekyun Seok <jaekyun@google.com> 2017-05-18 00:10:57 +0900
commit71693e6683cd925b8fdf06c2431b6fe187df6f40 (patch)
tree9305cbae4c087b2227179153d7224ba3df1ba4e2 /cmds/idmap/idmap.cpp
parent52f57cb7201ade08fb69cd7ee99671811c937be0 (diff)
Add a function to verify if idmap is made from given target/overlay packages
"--verify" will be used to verify if idmap corresponding to given fd is maded from given target and overlay packages. Test: building succeeded and tested on sailfish. Bug: 37179531 Change-Id: Id19bdfd9c61670437f3e1a5c29762ce93586590f
Diffstat (limited to 'cmds/idmap/idmap.cpp')
-rw-r--r--cmds/idmap/idmap.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/cmds/idmap/idmap.cpp b/cmds/idmap/idmap.cpp
index 3a237ffda775..8f86ed8f7d32 100644
--- a/cmds/idmap/idmap.cpp
+++ b/cmds/idmap/idmap.cpp
@@ -16,6 +16,7 @@ SYNOPSIS \n\
idmap --scan target-package-name-to-look-for path-to-target-apk dir-to-hold-idmaps \\\
dir-to-scan [additional-dir-to-scan [additional-dir-to-scan [...]]]\n\
idmap --inspect idmap \n\
+ idmap --verify target overlay fd \n\
\n\
DESCRIPTION \n\
Idmap files play an integral part in the runtime resource overlay framework. An idmap \n\
@@ -57,6 +58,9 @@ OPTIONS \n\
--inspect: decode the binary format of 'idmap' (path) and display the contents in a \n\
debug-friendly format. \n\
\n\
+ --verify: verify if idmap corresponding to file descriptor 'fd' (integer) is made from \n\
+ target package 'target' (path to apk) and overlay package 'overlay'. \n\
+\n\
EXAMPLES \n\
Create an idmap file: \n\
\n\
@@ -167,6 +171,29 @@ NOTES \n\
return idmap_create_path(target_apk_path, overlay_apk_path, idmap_path);
}
+ int maybe_verify_fd(const char *target_apk_path, const char *overlay_apk_path,
+ const char *idmap_str)
+ {
+ char *endptr;
+ int idmap_fd = strtol(idmap_str, &endptr, 10);
+ if (*endptr != '\0') {
+ fprintf(stderr, "error: failed to parse file descriptor argument %s\n", idmap_str);
+ return -1;
+ }
+
+ if (!verify_file_readable(target_apk_path)) {
+ ALOGD("error: failed to read apk %s: %s\n", target_apk_path, strerror(errno));
+ return -1;
+ }
+
+ if (!verify_file_readable(overlay_apk_path)) {
+ ALOGD("error: failed to read apk %s: %s\n", overlay_apk_path, strerror(errno));
+ return -1;
+ }
+
+ return idmap_verify_fd(target_apk_path, overlay_apk_path, idmap_fd);
+ }
+
int maybe_scan(const char *target_package_name, const char *target_apk_path,
const char *idmap_dir, const android::Vector<const char *> *overlay_dirs)
{
@@ -235,6 +262,10 @@ int main(int argc, char **argv)
return maybe_create_path(argv[2], argv[3], argv[4]);
}
+ if (argc == 5 && !strcmp(argv[1], "--verify")) {
+ return maybe_verify_fd(argv[2], argv[3], argv[4]);
+ }
+
if (argc >= 6 && !strcmp(argv[1], "--scan")) {
android::Vector<const char *> v;
for (int i = 5; i < argc; i++) {