From c55fc13aa32cfcf11ac719f6b599153f68a89ace Mon Sep 17 00:00:00 2001 From: Hyunbin Lee Date: Wed, 26 Jun 2013 21:59:07 +0900 Subject: [PATCH] Modify the logic to support the virtual root Change-Id: Ib12785be42801705ecdb8047cc08abb387a5073d Signed-off-by: Hyunbin Lee --- src/Manager/CompatibilityManager.cpp | 57 +++++++++++++++++++++--------------- src/Manager/CompatibilityManager.h | 2 +- src/Step/UninstallStep.cpp | 2 +- 3 files changed, 35 insertions(+), 26 deletions(-) diff --git a/src/Manager/CompatibilityManager.cpp b/src/Manager/CompatibilityManager.cpp index e5026cd..521df03 100755 --- a/src/Manager/CompatibilityManager.cpp +++ b/src/Manager/CompatibilityManager.cpp @@ -126,7 +126,6 @@ CompatibilityManager::FinalizeDataCaging(const String& rootPath) { "./dev" }, { "./etc" }, { "./lib" }, - { "./media" }, { "./mnt" }, { "./opt/usr" }, { "./opt/var/kdb/db" }, @@ -319,7 +318,7 @@ CATCH: } bool -CompatibilityManager::FinalizeVirtualRoot(const String& rootPath) +CompatibilityManager::FinalizeVirtualRoot(const String& rootPath, const PackageId& packageId) { int res = 0; unsigned int i = 0; @@ -330,22 +329,31 @@ CompatibilityManager::FinalizeVirtualRoot(const String& rootPath) { "./cache" }, { "./csa" }, { "./data" }, + { "./dev/pts" }, + { "./dev/shm" }, { "./dev" }, { "./etc" }, + { "./lib/modules" }, { "./lib" }, { "./media" }, { "./mnt" }, - { "./opt" }, { "./proc" }, { "./run" }, { "./sbin" }, { "./smack" }, { "./srv" }, + { "./sys/fs/cgroup/systemd" }, + { "./sys/fs/cgroup" }, { "./sys" }, { "./system" }, { "./tmp" }, { "./usr" }, - { "./var" } + { "./var/run" }, + { "./var" }, + { "./opt/usr" }, + //{ "./opt/var/run" }, + { "./opt/storage/sdcard" }, + { "./opt" }, }; std::unique_ptr pVirtualRootPath(_StringConverter::CopyToCharArrayN(destPath)); @@ -360,6 +368,27 @@ CompatibilityManager::FinalizeVirtualRoot(const String& rootPath) TryReturn((res == 0) || (errno == EINVAL) || (errno == ENOENT), false, "umount2() failed. (%d, %s), path = [%s]", errno, strerror(errno), mountPath[i].destPath); } + std::unique_ptr pPackageId(_StringConverter::CopyToCharArrayN(packageId)); + TryReturn(pPackageId, false, "The memory is insufficient."); + + char mountFlag[PATH_MAX] = {0, }; + sprintf(mountFlag, "/tmp/osp-compat/mount/internal/%s", pPackageId.get()); + res = unlink(mountFlag); + if ((res == -1) && (errno != ENOENT)) + { + AppLog("unlink(%s) failed, errno: %d (%s)", mountFlag, errno, strerror(errno)); + return false; + } + + memset(mountFlag, 0, PATH_MAX); + sprintf(mountFlag, "/tmp/osp-compat/mount/external/%s", pPackageId.get()); + res = unlink(mountFlag); + if ((res == -1) && (errno != ENOENT)) + { + AppLog("unlink(%s) failed, errno: %d (%s)", mountFlag, errno, strerror(errno)); + return false; + } + AppLog("[Tizen::Io] FinalizeVirtualRoot() succeeded, path: %ls", destPath.GetPointer()); return true; } @@ -383,13 +412,6 @@ CompatibilityManager::CreateOspInternalDirectories(const String& rootPath, const { "./Storagecard", 0705, false }, { "./Storagecard/Media", 0000, false }, // mount from /opt/storage/sdcard }; - struct _OspDir mediaDir[] = - { - { "/opt/usr/media/Images", 0777, false }, - { "/opt/usr/media/Sounds", 0777, false }, - { "/opt/usr/media/Videos", 0777, false }, - { "/opt/usr/media/Others", 0777, false } - }; String ospCompatSharedPath = _EnvironmentImpl::GetOspCompatSharedPath(); String ospShareAppIdPath(L"share/"); @@ -462,19 +484,6 @@ CompatibilityManager::CreateOspInternalDirectories(const String& rootPath, const return false; } - for (i = 0; i < sizeof(mediaDir) / sizeof(struct _OspDir); ++i) - { - ret = mkdir(mediaDir[i].path, mediaDir[i].mode); - if (ret == -1 && errno != 17) // EEXIST - { - AppLog("mkdir() failed (%s), path: %s, mode: 0%o", strerror(errno), mediaDir[i].path, mediaDir[i].mode); - return false; - } - - ret = chown(mediaDir[i].path, 5000, 5000); - TryReturn(ret == 0, false, "chown() failed (%d, %s), path: %s, uid: 5000, gid: 5000", errno, strerror(errno), mediaDir[i].path); - } - String appSharedDataPath(rootPath); appSharedDataPath.Append(L"/shared/data"); diff --git a/src/Manager/CompatibilityManager.h b/src/Manager/CompatibilityManager.h index e31596e..2969359 100755 --- a/src/Manager/CompatibilityManager.h +++ b/src/Manager/CompatibilityManager.h @@ -45,7 +45,7 @@ public: static bool LinkOspSharePath(const Tizen::Base::String& rootPath, const Tizen::App::PackageId& packageId); static bool PrepareVirtualRoot(const Tizen::Base::String& rootPath, const Tizen::App::PackageId& packageId); - static bool FinalizeVirtualRoot(const Tizen::Base::String& rootPath); + static bool FinalizeVirtualRoot(const Tizen::Base::String& rootPath, const Tizen::App::PackageId& packageId); private: CompatibilityManager(const CompatibilityManager& value); diff --git a/src/Step/UninstallStep.cpp b/src/Step/UninstallStep.cpp index 46d101d..b5d5a48 100755 --- a/src/Step/UninstallStep.cpp +++ b/src/Step/UninstallStep.cpp @@ -264,7 +264,7 @@ UninstallStep::OnStateRemoveDir(void) String virtualRoot = rootPath + DIR_VIRTUAL_ROOT; if (File::IsFileExist(virtualRoot) == true) { - res = CompatibilityManager::FinalizeVirtualRoot(rootPath); + res = CompatibilityManager::FinalizeVirtualRoot(rootPath, __pContext->__packageId); TryReturn(res == true, INSTALLER_ERROR_UNMOUNT_FAILED, "CompatibilityManager::FinalizeVirtualRoot(%ls) failed.", rootPath.GetPointer()); } -- 2.7.4