summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiwoong Im <jiwoong.im@samsung.com>2015-08-12 06:56:14 (GMT)
committerJiwoong Im <jiwoong.im@samsung.com>2015-08-12 07:37:50 (GMT)
commitb179e2ae78d5f48586b7f510682ba074536db8ea (patch)
treeaa295acb5b666ae6142e090f0c031aceed16c96f
parent648515eb77d1b17f7e6ab4cd21dae092fa808e78 (diff)
downloadui-gadget-1-b179e2ae78d5f48586b7f510682ba074536db8ea.zip
ui-gadget-1-b179e2ae78d5f48586b7f510682ba074536db8ea.tar.gz
ui-gadget-1-b179e2ae78d5f48586b7f510682ba074536db8ea.tar.bz2
Change-Id: If319f25895b56fb1749a22fdb225ad87a628483d Signed-off-by: Jiwoong Im <jiwoong.im@samsung.com>
-rw-r--r--CMakeLists.txt2
-rw-r--r--packaging/ui-gadget-1.spec1
-rwxr-xr-x[-rw-r--r--]src/module.c163
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;
}