From 21ba05ca89766fc1ad3e9b9bdeb531a6b395acb0 Mon Sep 17 00:00:00 2001 From: "junsuk77.oh" Date: Wed, 15 May 2013 17:19:10 +0900 Subject: [PATCH] fix get move api as sync function Change-Id: I5e034443cd68fcbc5a2c420213b120f1bc23c27b Signed-off-by: junsuk77.oh --- client/src/pkgmgr.c | 106 ++++++++++++++++++++++++++-------------------------- tool/pkg_cmd.c | 92 ++++++++++++++++----------------------------- 2 files changed, 86 insertions(+), 112 deletions(-) diff --git a/client/src/pkgmgr.c b/client/src/pkgmgr.c index ffccb2c..186a1b4 100755 --- a/client/src/pkgmgr.c +++ b/client/src/pkgmgr.c @@ -511,6 +511,49 @@ static int __app_list_cb (const pkgmgr_appinfo_h handle, return 0; } +static int __sync_process(char *req_key) +{ + int ret =0; + char info_file[PKG_STRING_LEN_MAX] = {'\0', }; + int result = 0; + int check_cnt = 0; + FILE *fp; + char buffer[PKG_ARGC_MAX] = {'\0', }; + + snprintf(info_file, PKG_STRING_LEN_MAX, "%s/%s", PKG_TMP_PATH, req_key); + while(1) + { + check_cnt ++; + if (access(info_file, F_OK) != 0) { + _LOGD("file is not generated yet.... wait\n", info_file); + usleep(10 * 1000); /* 10ms sleep*/ + } else { + fp = fopen(info_file, "r"); + if (fp == NULL) { + _LOGE("fopen failed\n"); + break; + } + fread(&buffer, sizeof(buffer), 1, fp); + fclose(fp); + + result = atoi(buffer); + _LOGD("info_file file is generated, result = %d. \n", result); + break; + } + + if (check_cnt > 500) { /* 5s time over*/ + _LOGD("wait time over!!\n"); + break; + } + } + + const char *rm_argv[] = { "/bin/rm", "-rf", info_file, NULL }; + ret = __xsystem(rm_argv); + if (ret < 0) + _LOGE("__xsystem failed, ret=%d\n", ret); + + return result; +} static int __csc_process(const char *csc_path, char *result_path) { int ret = 0; @@ -614,11 +657,6 @@ static int __get_size_process(pkgmgr_client * pc, const char *pkgid, pkgmgr_gets char *temp = NULL; int i = 0; char buf[128] = {'\0'}; - char size_info_file[PKG_STRING_LEN_MAX] = {'\0', }; - int pkg_size = 0; - int check_cnt = 0; - FILE *fp; - char buffer[PKG_ARGC_MAX] = {'\0', }; pkgmgr_client_t *mpc = (pkgmgr_client_t *) pc; retvm_if(mpc->ctype != PC_REQUEST, PKGMGR_R_EINVAL, "mpc->ctype is not PC_REQUEST\n"); @@ -668,47 +706,14 @@ static int __get_size_process(pkgmgr_client * pc, const char *pkgid, pkgmgr_gets } _LOGD("[args] %s [len] %d\n", args, len); - /* 6. request install */ + /* request */ ret = comm_client_request(mpc->info.request.cc, req_key, COMM_REQ_GET_SIZE, pkgtype, pkgid, args, NULL, 1); - - snprintf(size_info_file, PKG_STRING_LEN_MAX, "%s/%s", PKG_TMP_PATH, req_key); - while(1) - { - check_cnt ++; - if (access(size_info_file, F_OK) != 0) { - _LOGD("file is not generated yet.... wait\n", size_info_file); - usleep(10 * 1000); /* 10ms sleep*/ - } else { - _LOGD("size_info_file file is generated!!\n"); - - fp = fopen(size_info_file, "r"); - if (fp == NULL) { - _LOGE("fopen failed\n"); - break; - } - fread(&buffer, sizeof(buffer), 1, fp); - fclose(fp); - - pkg_size = atoi(buffer); - _LOGD("pkg_sizepkg_size == > %d!!\n", pkg_size); - - break; - } - - if (check_cnt > 500) { /* 5s time over*/ - _LOGD("wait time over!!\n"); - break; - } - } - - const char *rm_argv[] = { "/bin/rm", "-rf", size_info_file, NULL }; - ret = __xsystem(rm_argv); if (ret < 0) - _LOGE("__xsystem failed, ret=%d\n", ret); + _LOGE("comm_client_request failed, ret=%d\n", ret); - ret = pkg_size; + ret = __sync_process(req_key); if (ret < 0) - _LOGE("request failed, ret=%d\n", ret); + _LOGE("get size failed, ret=%d\n", ret); catch: for (i = 0; i < argcnt; i++) @@ -749,7 +754,6 @@ static int __move_pkg_process(pkgmgr_client * pc, const char *pkgid, pkgmgr_move installer_path = _get_backend_path_with_type(pkgtype); req_key = __get_req_key(pkgid); req_id = _get_request_id(); - __add_op_cbinfo(mpc, req_id, req_key, event_cb, data); /* generate argv */ snprintf(buf, 128, "%d", move_type); @@ -790,10 +794,14 @@ static int __move_pkg_process(pkgmgr_client * pc, const char *pkgid, pkgmgr_move } _LOGD("[args] %s [len] %d\n", args, len); - /* 6. request install */ + /* 6. request */ ret = comm_client_request(mpc->info.request.cc, req_key, COMM_REQ_TO_MOVER, pkgtype, pkgid, args, NULL, 1); if (ret < 0) - _LOGE("request failed, ret=%d\n", ret); + _LOGE("comm_client_request failed, ret=%d\n", ret); + + ret = __sync_process(pkgid); + if (ret != 0) + _LOGE("move pkg failed, ret=%d\n", ret); catch: for (i = 0; i < argcnt; i++) @@ -1963,11 +1971,6 @@ API int pkgmgr_client_request_service(pkgmgr_request_service_type service_type, tryvm_if((service_mode < PM_MOVE_TO_INTERNAL) || (service_mode > PM_MOVE_TO_SDCARD), ret = PKGMGR_R_EINVAL, "service_mode is wrong\n"); ret = __move_pkg_process(pc, pkgid, (pkgmgr_move_type)service_mode, event_cb, data); - if (ret < 0) - _LOGE("__move_pkg_process fail \n"); - else - ret = PKGMGR_R_OK; - break; case PM_REQUEST_GET_SIZE: @@ -1976,9 +1979,6 @@ API int pkgmgr_client_request_service(pkgmgr_request_service_type service_type, tryvm_if((service_mode < PM_GET_TOTAL_SIZE) || (service_mode > PM_GET_DATA_SIZE), ret = PKGMGR_R_EINVAL, "service_mode is wrong\n"); ret = __get_size_process(pc, pkgid, (pkgmgr_getsize_type)service_mode, event_cb, data); - if (ret < 0) - _LOGE("__get_size_process fail \n"); - break; case PM_REQUEST_KILL_APP: diff --git a/tool/pkg_cmd.c b/tool/pkg_cmd.c index 1ae2cbe..4f01a5f 100755 --- a/tool/pkg_cmd.c +++ b/tool/pkg_cmd.c @@ -815,65 +815,39 @@ static int __process_request() break; case MOVE_REQ: - if (data.quiet == 1) { - if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') { - printf("Please provide the arguments.\n"); - printf("use -h option to see usage\n"); - ret = -1; - break; - } - if (data.type < 0 || data.type > 1) { - printf("Invalid move type...See usage\n"); - ret = -1; - break; - } - pc = pkgmgr_client_new(PC_REQUEST); - if (pc == NULL) { - printf("PkgMgr Client Creation Failed\n"); - ret = -1; - break; - } - mode = PM_QUIET; - ret = __is_app_installed(data.pkgid); - if (ret == -1) { - printf("package is not installed\n"); - break; - } - ret = pkgmgr_client_move(pc, data.pkg_type, data.pkgid, data.type, mode); - if (ret < 0) - break; - ret = data.result; - } else { - if (data.pkgid[0] == '\0') { - printf("Please provide the arguments.\n"); - printf("use -h option to see usage\n"); - ret = -1; - break; - } - if (data.type < 0 || data.type > 1) { - printf("Invalid move type...See usage\n"); - ret = -1; - break; - } - g_type_init(); - main_loop = g_main_loop_new(NULL, FALSE); - pc = pkgmgr_client_new(PC_REQUEST); - if (pc == NULL) { - printf("PkgMgr Client Creation Failed\n"); - ret = -1; - break; - } - ret = __is_app_installed(data.pkgid); - if (ret == -1) { - printf("package is not installed\n"); - break; - } - ret = pkgmgr_client_request_service(PM_REQUEST_MOVE, data.type, pc, NULL, data.pkgid, NULL, __return_cb, NULL); - if (ret < 0) - break; - g_main_loop_run(main_loop); - ret = data.result; + if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') { + printf("Please provide the arguments.\n"); + printf("use -h option to see usage\n"); + ret = -1; + break; + } + if (data.type < 0 || data.type > 1) { + printf("Invalid move type...See usage\n"); + ret = -1; + break; + } + pc = pkgmgr_client_new(PC_REQUEST); + if (pc == NULL) { + printf("PkgMgr Client Creation Failed\n"); + ret = -1; + break; + } + mode = PM_QUIET; + ret = __is_app_installed(data.pkgid); + if (ret == -1) { + printf("package is not installed\n"); + break; } + if (data.quiet == 0) + ret = pkgmgr_client_move(pc, data.pkg_type, data.pkgid, data.type, mode); + else + ret = pkgmgr_client_request_service(PM_REQUEST_MOVE, data.type, pc, NULL, data.pkgid, NULL, NULL, NULL); + + printf("pkg[%s] move result = %d\n", data.pkgid, ret); + + if (ret < 0) + break; + ret = data.result; break; case APPPATH_REQ: @@ -1052,7 +1026,7 @@ static int __process_request() break; } - ret = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, data.type, pc, NULL, data.pkgid, NULL, __return_cb, NULL); + ret = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, data.type, pc, NULL, data.pkgid, NULL, NULL, NULL); if (ret < 0){ data.result = PKGCMD_ERR_FATAL_ERROR; break; -- 2.7.4