return ret;
}
+ ret = Util::MountLibraryDirectories(app_info_->GetBundle());
+ if (ret != 0) {
+ _E("Failed to mount lib directories");
+ return ret;
+ }
+
return Util::MountResourceDirectories(app_info_);
}
int LoaderMount::Mount(pid_t pid, const AppInfo* app_info) {
auto& b = app_info->GetBundle();
- if (b.GetType(kAulMountGadgetPaths) == BUNDLE_TYPE_NONE) return 0;
+ if (b.GetType(kAulMountGadgetPaths) == BUNDLE_TYPE_NONE &&
+ b.GetType(kAulMountLibDir) == BUNDLE_TYPE_NONE) return 0;
tizen_base::Parcel parcel;
Request request(pid, b);
Request request(&parcel);
ret = ChangeMountNamespace(request.GetPid());
if (ret == 0) {
- ret = Util::MountGadgetDirectories(request.GetBundle());
+ auto& b = request.GetBundle();
+ if (b.GetType(kAulMountGadgetPaths) != BUNDLE_TYPE_NONE)
+ ret |= Util::MountGadgetDirectories(b);
+ if (b.GetType(kAulMountLibDir) != BUNDLE_TYPE_NONE)
+ ret |= Util::MountLibraryDirectories(b);
+
ChangeMountNamespace(launchpad_ppid_);
}
constexpr const char kAulWaylandWorkingDir[] = "__AUL_WAYLAND_WORKING_DIR__";
constexpr const char kAulMountGadgetPaths[] = "__AUL_MOUNT_GADGET_PATHS__";
constexpr const char kAulMountGadgetPkgIds[] = "__AUL_MOUNT_GADGET_PKGIDS__";
+constexpr const char kAulMountLibDir[] = "__AUL_MOUNT_LIB_DIR__";
} // namespace launchpad
return 0;
}
+int Util::MountLibraryDirectories(const tizen_base::Bundle& b) {
+ auto lib_dir = b.GetStringArray(kAulMountLibDir);
+ if (!lib_dir.empty()) {
+ auto root_path = b.GetString(kAulRootPath);
+ MountDirectories(lib_dir, root_path + "/lib/");
+ }
+
+ return 0;
+}
+
int Util::MountGadgetDirectories(const tizen_base::Bundle& b) {
auto gadget_paths = b.GetStringArray(kAulMountGadgetPaths);
if (!gadget_paths.empty()) {
static int PrepareAppIdFile(const AppInfo* app_info);
static int SendCmdToAmd(enum AmdCmd cmd);
static int SendCmdToAmd(enum AmdCmd cmd, bundle* request, int opt);
+ static int MountLibraryDirectories(const tizen_base::Bundle& b);
};
} // namespace launchpad
_E("Failed to mount gadget resources");
return -1;
}
+
+ if (Util::MountLibraryDirectories(app_info->GetBundle()) != 0) {
+ _E("Failed to mount library direstories");
+ return -1;
+ }
}
int ret = Util::MountResourceDirectories(app_info);