diff options
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | include/aul.h | 1 | ||||
-rw-r--r-- | packaging/aul.spec | 1 | ||||
-rw-r--r-- | src/aul_path.c | 71 |
4 files changed, 60 insertions, 15 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index d3d7a3fc..964b5259 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ ENDIF (with_x11) # Set required packages INCLUDE(FindPkgConfig) -SET(AUL-1_LIB_PKG_CHECK_MODULES dlog bundle xdgmime libtzplatform-config pkgmgr-info capi-system-info vconf sqlite3 iniparser gio-2.0 glib-2.0 libxml-2.0 ttrace) +SET(AUL-1_LIB_PKG_CHECK_MODULES dlog bundle xdgmime libtzplatform-config pkgmgr-info capi-system-info vconf sqlite3 iniparser gio-2.0 glib-2.0 libxml-2.0 ttrace storage) IF (with_wayland) pkg_check_modules(libpkgs REQUIRED ${AUL-1_LIB_PKG_CHECK_MODULES} wayland-client tizen-extension-client ecore-wayland wayland-tbm-client tizen-remote-surface-client ecore) ENDIF (with_wayland) diff --git a/include/aul.h b/include/aul.h index 8fda7ace..394e6d4b 100644 --- a/include/aul.h +++ b/include/aul.h @@ -31,6 +31,7 @@ extern "C" { * @brief Return values in AUL. */ typedef enum _aul_return_val { + AUL_R_ENOENT = -15, /**< App directory entry error */ AUL_R_EREJECTED = -14, /**< App disable for mode */ AUL_R_ENOAPP = -13, /**< Failed to find app ID or pkg ID */ AUL_R_EHIDDENFORGUEST = -11, /**< App hidden for guest mode */ diff --git a/packaging/aul.spec b/packaging/aul.spec index 58b547a4..6bb5a066 100644 --- a/packaging/aul.spec +++ b/packaging/aul.spec @@ -30,6 +30,7 @@ BuildRequires: pkgconfig(libtzplatform-config) BuildRequires: pkgconfig(capi-system-info) BuildRequires: pkgconfig(iniparser) BuildRequires: pkgconfig(sqlite3) +BuildRequires: pkgconfig(storage) BuildRequires: pkgconfig(ttrace) %if %{with wayland} BuildRequires: pkgconfig(ecore) diff --git a/src/aul_path.c b/src/aul_path.c index 9f629a8b..6603b5f0 100644 --- a/src/aul_path.c +++ b/src/aul_path.c @@ -26,6 +26,7 @@ #include <tzplatform_config.h> #include <pkgmgr-info.h> +#include <storage-internal.h> #include "aul_api.h" #include "aul_util.h" @@ -33,13 +34,7 @@ #define ROOT_UID 0 #define GLOBAL_USER tzplatform_getuid(TZ_SYS_GLOBALAPP_USER) -#define _EXTERNAL_APP_SPECIFIC_PATH(uid) ({ \ - tzplatform_set_user(uid); \ - const char *path = tzplatform_mkpath3(TZ_SYS_MEDIA, \ - "SDCardA1/apps", tzplatform_getenv(TZ_USER_NAME)); \ - tzplatform_reset_user(); \ - path; }) -#define _APP_SPECIFIC_PATH tzplatform_getenv(TZ_USER_APP) +#define DEFAULT_EXTERNAL_STORAGE "/opt/media/sdcard" static const char _DATA_DIR[] = "data/"; static const char _CACHE_DIR[] = "cache/"; @@ -49,6 +44,8 @@ static const char _SHARED_DATA_DIR[] = "shared/data/"; static const char _SHARED_TRUSTED_DIR[] = "shared/trusted/"; static const char _SHARED_RESOURCE_DIR[] = "shared/res/"; +static char ext_specific_path[PATH_MAX]; + static const char * __get_specific_path(const char *pkgid, uid_t uid) { const char * path; @@ -97,25 +94,56 @@ static int __get_pkgid(char *pkgid, int len, const char *appid, uid_t uid) return AUL_R_OK; } +/* return value should be freed after use. */ +static char *__get_sdcard_path(void) +{ + char *sdpath = NULL; + char *result_path = NULL; + int storage_id = 0; + int ret; + + ret = storage_get_primary_sdcard(&storage_id, &sdpath); + if (ret != STORAGE_ERROR_NONE) + _W("failed to get primary sdcard (%d)", ret); + + if (sdpath) + result_path = sdpath; + else + result_path = strdup(DEFAULT_EXTERNAL_STORAGE); + + return result_path; +} + static int __get_external_path(char **path, const char *appid, const char *dir_name, uid_t uid) { char buf[PATH_MAX]; char pkgid[NAME_MAX]; + char *ext_path; int ret; ret = __get_pkgid(pkgid, sizeof(pkgid), appid, uid); if (ret != AUL_R_OK) return ret; - snprintf(buf, sizeof(buf), "%s/%s/%s", - _EXTERNAL_APP_SPECIFIC_PATH(uid), - pkgid, dir_name ? dir_name : ""); - assert(path); - *path = strdup(buf); - return AUL_R_OK; + *path = NULL; + ext_path = __get_sdcard_path(); + if (ext_path) { + tzplatform_set_user(uid); + snprintf(buf, sizeof(buf), "%s/apps/%s/%s/%s", + ext_path, tzplatform_getenv(TZ_USER_NAME), + pkgid, dir_name ? dir_name : ""); + tzplatform_reset_user(); + free(ext_path); + ext_path = NULL; + + *path = strdup(buf); + } + ret = AUL_R_OK; + + return ret; } static int __get_path(char **path, const char *appid, const char *dir_name, @@ -315,7 +343,22 @@ API const char *aul_get_app_specific_path(void) API const char *aul_get_app_external_specific_path(void) { - return _EXTERNAL_APP_SPECIFIC_PATH(getuid()); + char *ext_path; + char *result_path = NULL; + + ext_path = __get_sdcard_path(); + if (ext_path) { + tzplatform_set_user(getuid()); + snprintf(ext_specific_path, sizeof(ext_specific_path), + "%s/apps/%s", ext_path, + tzplatform_getenv(TZ_USER_NAME)); + tzplatform_reset_user(); + result_path = ext_specific_path; + free(ext_path); + ext_path = NULL; + } + + return result_path; } API int aul_get_app_shared_data_path_by_appid(const char *appid, char **path) |