Remove storage API dependency (#477) accepted/tizen/unified/20230726.020653
author조웅석/MDE Lab(SR)/삼성전자 <ws77.cho@samsung.com>
Mon, 24 Jul 2023 23:46:24 +0000 (08:46 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Mon, 24 Jul 2023 23:46:24 +0000 (08:46 +0900)
Use tzplatform_config API to get special folder instead of storage API.
storage API makes thread and gdbus connection internally and it can make some error at the loader mode.
In this patch, we get special folders (music, image, video) from tzplatform data.
Additionally, to allow override speicial folder location with coreclr_env.list,
change the initEnvForSpecialFolder() call location.

NativeLauncher/CMakeLists.txt
NativeLauncher/launcher/lib/core_runtime.cc
packaging/dotnet-launcher.spec

index 7e03c5e..350d373 100644 (file)
@@ -4,7 +4,7 @@ PROJECT("dotnet-tools")
 MESSAGE("CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
 
 INCLUDE(FindPkgConfig)
-PKG_CHECK_MODULES(${PROJECT_NAME} REQUIRED aul pkgmgr-info pkgmgr-installer ecore bundle dlog liblaunchpad glib-2.0 libsmack capi-appfw-app-common storage jsoncpp openssl3 sqlite3 libtzplatform-config)
+PKG_CHECK_MODULES(${PROJECT_NAME} REQUIRED aul pkgmgr-info pkgmgr-installer ecore bundle dlog liblaunchpad glib-2.0 libsmack capi-appfw-app-common jsoncpp openssl3 sqlite3 libtzplatform-config)
 
 FOREACH(flag ${${PROJECT_NAME}_CFLAGS})
     SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
index 07ec8e9..b03b204 100644 (file)
@@ -35,9 +35,9 @@
 #include <linux/limits.h>
 #include <pthread.h>
 
-#include <storage.h>
 #include <vconf.h>
 #include <app_common.h>
+#include <tzplatform_config.h>
 
 #include <Ecore.h>
 
@@ -143,55 +143,28 @@ static void registerSigHandler()
        }
 }
 
-static bool storage_cb(int id, storage_type_e type, storage_state_e state, const char *path, void *user_data)
-{
-       int* tmp = (int*)user_data;
-       if (type == STORAGE_TYPE_INTERNAL)
-       {
-               *tmp = id;
-               return false;
-       }
-
-       return true;
-}
-
-static void setSpecialFolder(storage_directory_e type, const char* key)
-{
-       int error;
-       char* path = NULL;
-       static int __storageId = -1;
-
-       if (__storageId < 0) {
-               error = storage_foreach_device_supported(storage_cb, &__storageId);
-               if (error != STORAGE_ERROR_NONE) {
-                       return;
-               }
-       }
-
-       error = storage_get_directory(__storageId, type, &path);
-       if (error == STORAGE_ERROR_NONE && path != NULL) {
-               if (setEnvironmentVariable) {
-                       setEnvironmentVariable(key, const_cast<char *>(path));
-               } else {
-                       _ERR("coreclr is not initialized!. setEnvironmentVariable() function is not ready!");
-                       _exit(0);
-               }
-               free(path);
-       }
-}
-
 static void initEnvForSpecialFolder()
 {
+       const char* path = NULL;
        if (getenv("XDG_PICTURES_DIR") == NULL) {
-               setSpecialFolder(STORAGE_DIRECTORY_IMAGES, "XDG_PICTURES_DIR");
+               path = tzplatform_getenv(TZ_USER_IMAGES);
+               if (path) {
+                       setenv("XDG_PICTURES_DIR", path, 1);
+               }
        }
 
        if (getenv("XDG_MUSIC_DIR") == NULL) {
-               setSpecialFolder(STORAGE_DIRECTORY_MUSIC, "XDG_MUSIC_DIR");
+               path = tzplatform_getenv(TZ_USER_MUSIC);
+               if (path) {
+                       setenv("XDG_MUSIC_DIR", path, 1);
+               }
        }
 
        if (getenv("XDG_VIDEOS_DIR") == NULL) {
-               setSpecialFolder(STORAGE_DIRECTORY_VIDEOS, "XDG_VIDEOS_DIR");
+               path = tzplatform_getenv(TZ_USER_VIDEOS);
+               if (path) {
+                       setenv("XDG_VIDEOS_DIR", path, 1);
+               }
        }
 }
 
@@ -381,6 +354,9 @@ int CoreRuntime::initialize(const char* appType, LaunchMode launchMode)
        // Disable config cache to set environment after coreclr_initialize()
        putenv(const_cast<char *>("COMPlus_DisableConfigCache=1"));
 
+       // Set environment variable for System.Environment.SpecialFolder
+       initEnvForSpecialFolder();
+
        // read string from external file and set them to environment value.
        setEnvFromFile();
 
@@ -477,13 +453,6 @@ int CoreRuntime::initialize(const char* appType, LaunchMode launchMode)
        }
 
 
-       // Set environment for System.Environment.SpecialFolder
-       // Below function creates dbus connection by callging storage API.
-       // If dbus connection is created bofere fork(), forked process cannot use dbus.
-       // To avoid gdbus blocking issue, below function should be called after fork()
-       // Addtionally, setenv() is not thread-safe function. storage API makes thread internally
-       // and it makes crash while calling setenv(). So, use setEnvrionmentVariable() instead of setenv()
-       initEnvForSpecialFolder();
 
        __initialized = true;
 
index b444dce..f7d3298 100644 (file)
@@ -20,7 +20,6 @@ BuildRequires: pkgconfig(pkgmgr-installer)
 BuildRequires: pkgconfig(glib-2.0)
 BuildRequires: pkgconfig(libsmack)
 BuildRequires: pkgconfig(capi-appfw-app-common)
-BuildRequires: pkgconfig(storage)
 BuildRequires: pkgconfig(jsoncpp)
 BuildRequires: pkgconfig(openssl3)
 BuildRequires: pkgconfig(libsystemd)