if (ret < 0)
return PAD_ERR_FAILED;
+ ret = _mount_lib_dir(kb);
+ if (ret < 0)
+ return PAD_ERR_FAILED;
+
if (bundle_get_type(kb, AUL_K_SDK) != BUNDLE_TYPE_NONE)
_debug_change_mount_namespace();
ret = __change_mount_namespace(request->pid);
if (ret == 0) {
- ret = _mount_gadget_dirs(request->b);
+ if (bundle_get_type(request->b, AUL_K_MOUNT_GADGET_PATHS) != BUNDLE_TYPE_NONE)
+ ret |= _mount_gadget_dirs(request->b);
+ if (bundle_get_type(request->b, AUL_K_MOUNT_LIB_DIR) != BUNDLE_TYPE_NONE)
+ ret |= _mount_lib_dir(request->b);
if (ret != 0)
_E("Failed to mount gadget paths");
if (kb == NULL)
return -EINVAL;
- if (bundle_get_type(kb, AUL_K_MOUNT_GADGET_PATHS) == BUNDLE_TYPE_NONE)
+ if (bundle_get_type(kb, AUL_K_MOUNT_GADGET_PATHS) == BUNDLE_TYPE_NONE &&
+ bundle_get_type(kb, AUL_K_MOUNT_LIB_DIR) == BUNDLE_TYPE_NONE)
return 0;
request = __request_create(pid, kb);
#define AUL_K_ENABLED_LIGHT_USER "__AUL_ENABLED_LIGHT_USER__"
#define AUL_K_MOUNT_GADGET_PATHS "__AUL_MOUNT_GADGET_PATHS__"
#define AUL_K_MOUNT_GADGET_PKGIDS "__AUL_MOUNT_GADGET_PKGIDS__"
+#define AUL_K_MOUNT_LIB_DIR "__AUL_MOUNT_LIB_DIR__"
#ifdef __cplusplus
int _prepare_id_file(void);
void _print_hwc_log(const char *format, ...);
int _mount_res_dir(const char *menu_info, bundle *kb);
+int _mount_lib_dir(bundle *kb);
int _mount_gadget_dirs(bundle *kb);
int _close_fds(int *except_fds, int len);
}
#endif
#endif /* __LAUNCHPAD_COMMON_H__ */
-
return 0;
}
+int _mount_lib_dir(bundle *kb)
+{
+ const char *root_path;
+ const char **val;
+ int len;
+ char dest[PATH_MAX];
+
+ root_path = bundle_get_val(kb, AUL_K_ROOT_PATH);
+ if (!root_path)
+ return -1;
+
+ val = bundle_get_str_array(kb, AUL_K_MOUNT_LIB_DIR, &len);
+ if (val) {
+ snprintf(dest, sizeof(dest), "%s/lib", root_path);
+ __mount_dir(val, len, dest);
+ } else if (get_last_result() != BUNDLE_ERROR_KEY_NOT_AVAILABLE) {
+ _E("invalid mount info");
+ return -1;
+ }
+
+ return 0;
+}
+
static bool __is_exceptable(int *except_fds, int len, int fd)
{
int i = 0;
ret = _mount_gadget_dirs(kb);
if (ret < 0)
return -1;
+
+ ret = _mount_lib_dir(kb);
+ if (ret < 0)
+ return -1;
}
ret = _mount_res_dir(root_path, kb);