183ab0d7c1824f3a29e41af8a95a954c73f48c287Mårten Kongstad 213221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross#ifndef _IDMAP_H_ 313221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross#define _IDMAP_H_ 413221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross 513221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross#define LOG_TAG "idmap" 613221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross 713221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross#include <utils/Log.h> 883ab0d7c1824f3a29e41af8a95a954c73f48c287Mårten Kongstad#include <utils/Vector.h> 913221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross 1013221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross#include <errno.h> 1113221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross#include <stdio.h> 1213221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross 1313221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross#ifndef TEMP_FAILURE_RETRY 1413221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross// Used to retry syscalls that can return EINTR. 1513221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross#define TEMP_FAILURE_RETRY(exp) ({ \ 1613221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross typeof (exp) _rc; \ 1713221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross do { \ 1813221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross _rc = (exp); \ 1913221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross } while (_rc == -1 && errno == EINTR); \ 2013221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross _rc; }) 2113221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross#endif 2213221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross 2313221c9cffdb289851411bdc73a9a5236fcb9291Colin Crossint idmap_create_path(const char *target_apk_path, const char *overlay_apk_path, 2413221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross const char *idmap_path); 2513221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross 2613221c9cffdb289851411bdc73a9a5236fcb9291Colin Crossint idmap_create_fd(const char *target_apk_path, const char *overlay_apk_path, int fd); 2713221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross 2871693e6683cd925b8fdf06c2431b6fe187df6f40Jaekyun Seokint idmap_verify_fd(const char *target_apk_path, const char *overlay_apk_path, int fd); 2971693e6683cd925b8fdf06c2431b6fe187df6f40Jaekyun Seok 307de2f9c73fbe93bfb7dff3c046cf7a3137599f6cJaekyun Seok// Regarding target_package_name: the idmap_scan implementation should 317de2f9c73fbe93bfb7dff3c046cf7a3137599f6cJaekyun Seok// be able to extract this from the manifest in target_apk_path, 327de2f9c73fbe93bfb7dff3c046cf7a3137599f6cJaekyun Seok// simplifying the external API. 337de2f9c73fbe93bfb7dff3c046cf7a3137599f6cJaekyun Seokint idmap_scan(const char *target_package_name, const char *target_apk_path, 347de2f9c73fbe93bfb7dff3c046cf7a3137599f6cJaekyun Seok const char *idmap_dir, const android::Vector<const char *> *overlay_dirs); 357de2f9c73fbe93bfb7dff3c046cf7a3137599f6cJaekyun Seok 3613221c9cffdb289851411bdc73a9a5236fcb9291Colin Crossint idmap_inspect(const char *idmap_path); 3713221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross 3813221c9cffdb289851411bdc73a9a5236fcb9291Colin Cross#endif // _IDMAP_H_ 39