+ std::string dllPath = absDllPath;
+ if (opt->flags & NI_FLAGS_APPNI) {
+ std::string niDirPath;
+ std::string niTmpDirPath;
+ std::string prevPath;
+
+ prevPath = getBaseName(absDllPath);
+ niDirPath = concatPath(prevPath, APP_NI_SUB_DIR);
+ niTmpDirPath = concatPath(prevPath, APP_NI_SUB_TMP_DIR);
+
+ if (opt->flags & NI_FLAGS_APP_UNDER_RO_AREA) {
+ niTmpDirPath = replaceAll(niTmpDirPath, getBaseName(__pm->getAppRootPath()), __READ_ONLY_APP_UPDATE_DIR);
+ niDirPath = replaceAll(niDirPath, getBaseName(__pm->getAppRootPath()), __READ_ONLY_APP_UPDATE_DIR);
+ _INFO("App is installed in RO area. Change NI path to RW area(%s).", niTmpDirPath.c_str());
+ }
+
+ if (!isDirectory(niDirPath)) {
+ if (!createDirsAndCopyOwnerShip(niTmpDirPath, prevPath)) {
+ niTmpDirPath = prevPath;
+ _SERR("fail to create dir (%s)", niTmpDirPath.c_str());
+ }
+ dllPath = concatPath(niTmpDirPath, getFileName(absDllPath));
+ } else {
+ dllPath = concatPath(niDirPath, getFileName(absDllPath));
+ }
+ }
+