diff options
author | Jiwoong Im <jiwoong.im@samsung.com> | 2015-08-12 15:56:14 +0900 |
---|---|---|
committer | Jiwoong Im <jiwoong.im@samsung.com> | 2015-08-12 16:37:50 +0900 |
commit | b179e2ae78d5f48586b7f510682ba074536db8ea (patch) | |
tree | aa295acb5b666ae6142e090f0c031aceed16c96f | |
parent | 648515eb77d1b17f7e6ab4cd21dae092fa808e78 (diff) | |
download | ui-gadget-1-b179e2ae78d5f48586b7f510682ba074536db8ea.tar.gz ui-gadget-1-b179e2ae78d5f48586b7f510682ba074536db8ea.tar.bz2 ui-gadget-1-b179e2ae78d5f48586b7f510682ba074536db8ea.zip |
modify ug library search path in ug module loadsubmit/tizen/20150814.080020accepted/tizen/wearable/20150814.112926accepted/tizen/tv/20150814.113010accepted/tizen/mobile/20150814.112849
Change-Id: If319f25895b56fb1749a22fdb225ad87a628483d
Signed-off-by: Jiwoong Im <jiwoong.im@samsung.com>
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | packaging/ui-gadget-1.spec | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | src/module.c | 163 |
3 files changed, 105 insertions, 61 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 49e7d99..0282520 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ SET(SRCS src/ug.c ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS}) -SET(PKGS_CHECK_MODULES "glib-2.0 bundle dlog capi-appfw-application appsvc capi-appfw-app-manager ecore dbus-glib-1 elementary libtzplatform-config") +SET(PKGS_CHECK_MODULES "glib-2.0 bundle dlog capi-appfw-application appsvc capi-appfw-app-manager ecore dbus-glib-1 elementary pkgmgr-info libtzplatform-config") IF (with_x) PKG_CHECK_MODULES(PKGS REQUIRED ${PKGS_CHECK_MODULES} x11) SET(UG_FLAG "") diff --git a/packaging/ui-gadget-1.spec b/packaging/ui-gadget-1.spec index 54a3b0d..72b386f 100644 --- a/packaging/ui-gadget-1.spec +++ b/packaging/ui-gadget-1.spec @@ -24,6 +24,7 @@ BuildRequires: pkgconfig(capi-appfw-application) BuildRequires: pkgconfig(capi-appfw-app-manager) BuildRequires: pkgconfig(vconf) BuildRequires: pkgconfig(dbus-glib-1) +BuildRequires: pkgconfig(pkgmgr-info) BuildRequires: cmake BuildRequires: edje-bin BuildRequires: pkgconfig(libtzplatform-config) diff --git a/src/module.c b/src/module.c index 5fd92eb..c61f720 100644..100755 --- a/src/module.c +++ b/src/module.c @@ -29,6 +29,7 @@ #include <sys/types.h> #include <app_manager.h> +#include <pkgmgr-info.h> #include "ug-module.h" #include "ug-dbg.h" @@ -52,10 +53,9 @@ static int file_exist(const char *filename) return 0; } -static char *__ug_module_get_addr(const char *ug_so) +static char *__ug_module_get_addr(const char *ug_name) { FILE *file; - int ret; char buf[PATH_MAX] = {0,}; char mem[PATH_MAX] = {0,}; @@ -63,7 +63,7 @@ static char *__ug_module_get_addr(const char *ug_so) char *saveptr = NULL; int cnt = 0; - if(ug_so == NULL) + if (ug_name == NULL) goto func_out; snprintf(buf, sizeof(buf), "/proc/%d/maps", getpid()); @@ -78,14 +78,14 @@ static char *__ug_module_get_addr(const char *ug_so) while(fgets(buf, PATH_MAX, file) != NULL) { - if(strstr(buf, ug_so)) { + if (strstr(buf, ug_name)) { token_param = strtok_r(buf," ", &saveptr); - if((token_param == NULL) || (strlen(token_param) > MEM_ADDR_TOT_LEN)) { + if ((token_param == NULL) || (strlen(token_param) > MEM_ADDR_TOT_LEN)) { _ERR("proc token param(%s) error", token_param); goto close_out; } - if(cnt > 0) { + if (cnt > 0) { memcpy((void *)(mem+MEM_ADDR_LEN+1), (const void *)(token_param+MEM_ADDR_LEN+1), MEM_ADDR_LEN); } else { @@ -93,7 +93,7 @@ static char *__ug_module_get_addr(const char *ug_so) cnt++; } } else { - if(cnt > 0) + if (cnt > 0) goto close_out; } @@ -106,54 +106,109 @@ close_out: file = NULL; func_out: - if(strlen(mem) > 0) + if (strlen(mem) > 0) return strdup(mem); else return NULL; } +static int __get_ug_info(const char* name, char** ug_file_path) +{ + char ug_file[PATH_MAX] = {0,}; + char pkg_name[PATH_MAX] = {0,}; + int ret = -1; + char *pkg_id = NULL; + + snprintf(ug_file, PATH_MAX, "%s/lib/libug-%s.so", + tzplatform_getenv(TZ_SYS_RO_UG), name); + if (file_exist(ug_file)) { + LOGD("ug_file(%s) check ok(%d)", ug_file, errno); + goto out_func; + } else { + LOGD("ug_file(%s) check fail(%d)", ug_file, errno); + } + snprintf(ug_file, PATH_MAX, "%s/lib/libug-%s.so", + tzplatform_getenv(TZ_SYS_RW_UG), name); + if (file_exist(ug_file)) { + LOGD("ug_file(%s) check ok(%d)", ug_file, errno); + goto out_func; + } else { + LOGD("ug_file(%s) check fail(%d)", ug_file, errno); + } + + /* Get pkg name by appid */ + pkgmgrinfo_appinfo_h handle; + ret = pkgmgrinfo_appinfo_get_appinfo(name, &handle); + + if (ret != PMINFO_R_OK) { + SECURE_LOGD("fail to get app info using ug name(%s)", name); + goto err_func; + } + ret = pkgmgrinfo_appinfo_get_pkgid(handle, &pkg_id); + if (ret != PMINFO_R_OK) { + _DBG("fail to get pkgid from appinfo handle"); + pkgmgrinfo_appinfo_destroy_appinfo(handle); + goto err_func; + } else { + SECURE_LOGD("pkg id: %s\n", pkg_id); + snprintf(pkg_name, PATH_MAX, "%s", pkg_id); + } + + pkgmgrinfo_appinfo_destroy_appinfo(handle); + + if (strlen(pkg_name)) { + /* FOTA UPDATE CORE APP(RPM) */ + snprintf(ug_file, PATH_MAX, "%s/%s/lib/ug/lib%s.so", + tzplatform_getenv(TZ_SYS_RO_APP), pkg_name, name); + if (file_exist(ug_file)) { + LOGD("ug_file(%s) check ok(%d)", ug_file, errno); + goto out_func; + } else { + LOGD("ug_file(%s) check fail(%d)", ug_file, errno); + } + /* Downloadable CORE APP(TPK) */ + snprintf(ug_file, PATH_MAX, "%s/%s/lib/ug/lib%s.so", + tzplatform_getenv(TZ_USER_APP), pkg_name, name); + if (file_exist(ug_file)) { + LOGD("ug_file(%s) check ok(%d)", ug_file, errno); + goto out_func; + } else { + LOGD("ug_file(%s) check fail(%d)", ug_file, errno); + } + LOGD("ug_file(%s) does not exist(%d)", ug_file, errno); + } + +out_func: + ret = 0; + if ((strlen(ug_file) > 0) && (ug_file_path)) { + *ug_file_path = strdup(ug_file); + } + return ret; + +err_func: + + return -1; +} + struct ug_module *ug_module_load(const char *name) { void *handle; struct ug_module *module; - char ug_file[PATH_MAX]; - char *pkg_name = NULL; - int (*module_init) (struct ug_module_ops *ops); + char *ug_file = NULL; + + if (__get_ug_info(name, &ug_file) < 0) { + _ERR("error in getting ug file path"); + return NULL; + } module = calloc(1, sizeof(struct ug_module)); if (!module) { errno = ENOMEM; + free(ug_file); return NULL; } - app_manager_get_app_id(getpid(), &pkg_name); - - do { - if (pkg_name) { - snprintf(ug_file, PATH_MAX, "%s/%s/lib/libug-%s.so", tzplatform_getenv(TZ_SYS_RO_APP), pkg_name, name); - if (file_exist(ug_file)) - break; - snprintf(ug_file, PATH_MAX, "%s/%s/lib/libug-%s.so", tzplatform_getenv(TZ_SYS_RO_APP), pkg_name, name); - if (file_exist(ug_file)) - break; - } - snprintf(ug_file, PATH_MAX, "%s/lib/libug-%s.so", tzplatform_getenv(TZ_SYS_RO_UG), name); - if (file_exist(ug_file)) - break; - snprintf(ug_file, PATH_MAX, "%s/lib/libug-%s.so", tzplatform_getenv(TZ_SYS_RW_UG), name); - if (file_exist(ug_file)) - break; - snprintf(ug_file, PATH_MAX, "%s/lib/libug-%s.so", tzplatform_getenv(TZ_USER_UG), name); - if (file_exist(ug_file)) - break; - } while (0); - - if(pkg_name) { - free(pkg_name); - pkg_name = NULL; - } - handle = dlopen(ug_file, RTLD_LAZY); if (!handle) { _ERR("dlopen failed: %s", dlerror()); @@ -172,8 +227,9 @@ struct ug_module *ug_module_load(const char *name) module->handle = handle; module->module_name = strdup(name); - module->addr = __ug_module_get_addr(ug_file); + module->addr = __ug_module_get_addr(name); + free(ug_file); return module; module_dlclose: @@ -181,6 +237,7 @@ struct ug_module *ug_module_load(const char *name) module_free: free(module); + free(ug_file); return NULL; } @@ -205,10 +262,10 @@ int ug_module_unload(struct ug_module *module) module->handle = NULL; } - if(module->module_name) + if (module->module_name) free(module->module_name); - if(module->addr) + if (module->addr) free(module->addr); free(module); @@ -217,26 +274,12 @@ int ug_module_unload(struct ug_module *module) int ug_exist(const char* name) { - char ug_file[PATH_MAX] = {0,}; - int ret = 0; + int ret = 1; - do { - snprintf(ug_file, PATH_MAX, "%s/lib/libug-%s.so", tzplatform_getenv(TZ_SYS_RO_UG), name); - if (file_exist(ug_file)) { - ret = 1; - break; - } - snprintf(ug_file, PATH_MAX, "%s/lib/libug-%s.so", tzplatform_getenv(TZ_SYS_RW_UG), name); - if (file_exist(ug_file)) { - ret = 1; - break; - } - snprintf(ug_file, PATH_MAX, "%s/lib/libug-%s.so", tzplatform_getenv(TZ_USER_UG), name); - if (file_exist(ug_file)) { - ret = 1; - break; - } - } while (0); + if (__get_ug_info(name, NULL) < 0) { + _ERR("error in getting ug file path"); + ret = 0; + } return ret; } |