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