From: Junghyun Yeon Date: Wed, 23 Sep 2020 08:51:54 +0000 (+0900) Subject: Add parameters for further usage X-Git-Tag: submit/tizen/20201006.000256~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F02%2F244702%2F1;p=platform%2Fcore%2Fappfw%2Fpkgmgr-tool.git Add parameters for further usage This will allows other modules to install packages at different timing. Change-Id: I8989921f0e056879c38ed41a801a8ede30731442 Signed-off-by: Junghyun Yeon --- diff --git a/src/install_preload_pkg/install_preload_pkg.c b/src/install_preload_pkg/install_preload_pkg.c index 71e5542..a514170 100644 --- a/src/install_preload_pkg/install_preload_pkg.c +++ b/src/install_preload_pkg/install_preload_pkg.c @@ -29,6 +29,7 @@ #include #include #include +#include #include @@ -59,6 +60,20 @@ #define WGT_RW_DIR tzplatform_mkpath(TZ_SYS_RO_APP, ".preload-rw-wgt") #define ALL_PRELOAD_RW_PKG_LIST "/opt/usr/share/.all_preload_rw_list" +#define PKG_TYPE_STRING_LEN_MAX 128 + +#define OPTVAL_SKIP_CHECK_REFERENCE 1000 +#define OPTVAL_PATH 1001 +#define OPTVAL_PRELOAD 1002 +#define OPTVAL_PRELOAD_RW 1003 +#define OPTVAL_PKG_TYPE 1004 + +typedef enum install_type_e { + INSTALL_TYPE_UNDEFINED = 0, + INSTALL_TYPE_PRELOAD = 1, + INSTALL_TYPE_PRELOAD_RW = 2 +} install_type; + struct pkginfo { char *pkgid; char *version; @@ -229,36 +244,110 @@ static int _is_authorized(uid_t uid) int main(int argc, char *argv[]) { + int opt_idx = 0; + int c = -1; + char pkg_path[PATH_MAX]; + char pkg_type[PKG_TYPE_STRING_LEN_MAX]; char err_msg[BUFSZE]; + char *backend_cmd; int handle = -1; int ret; bool skip_check_reference = false; + bool is_default = true; + bool default_operation = false; + install_type op_type = INSTALL_TYPE_UNDEFINED; + const char *short_options = ""; + const struct option long_options[] = { + {"skip-check-reference", 0, NULL, OPTVAL_SKIP_CHECK_REFERENCE}, + {"path", 1, NULL, OPTVAL_PATH}, + {"preload", 0, NULL, OPTVAL_PRELOAD}, + {"preload-rw", 0, NULL, OPTVAL_PRELOAD_RW}, + {"type", 1, NULL, OPTVAL_PKG_TYPE}, + {0, 0, 0, 0} /* sentinel */ + }; + if (!_is_authorized(getuid())) { _E("You are not an authorized user!"); return -1; } - if (argc > 1 && !strcmp(argv[1], "--skip-check-reference")) - skip_check_reference = true; + while (1) { + c = getopt_long(argc, argv, short_options, long_options, + &opt_idx); + if (c == -1) + break; /* Parse end */ + switch (c) { + case OPTVAL_PATH: + is_default = false; + if (optarg) + snprintf(pkg_path, sizeof(pkg_path), + "%s", optarg); + break; + case OPTVAL_SKIP_CHECK_REFERENCE: + skip_check_reference = true; + break; + case OPTVAL_PKG_TYPE: + is_default = false; + if (optarg) + snprintf(pkg_type, sizeof(pkg_type), + "%s", optarg); + if (strcmp(pkg_type, "tpk") != 0 && + strcmp(pkg_type, "wgt") != 0) { + _E("Wrong pkg type: [%s]", pkg_type); + return -1; + } + break; + case OPTVAL_PRELOAD: + is_default = false; + op_type = INSTALL_TYPE_PRELOAD; + break; + case OPTVAL_PRELOAD_RW: + is_default = false; + op_type = INSTALL_TYPE_PRELOAD_RW; + break; + default: + _E("Unidentified input: (%d)", c); + break; + } + } - if (_install_preload_pkg(TPK_BACKEND_CMD, TPK_DIR, true, - skip_check_reference) < 0) - goto error; + if (is_default) { + if (_install_preload_pkg(TPK_BACKEND_CMD, TPK_DIR, true, + skip_check_reference) < 0) + goto error; - if (_install_preload_pkg(WGT_BACKEND_CMD, WGT_DIR, true, - skip_check_reference) < 0) - goto error; + if (_install_preload_pkg(WGT_BACKEND_CMD, WGT_DIR, true, + skip_check_reference) < 0) + goto error; - if (_install_preload_pkg(TPK_BACKEND_CMD, TPK_RW_DIR, false, - skip_check_reference) < 0) - goto error; + if (_install_preload_pkg(TPK_BACKEND_CMD, TPK_RW_DIR, false, + skip_check_reference) < 0) + goto error; - if (_install_preload_pkg(WGT_BACKEND_CMD, WGT_RW_DIR, false, - skip_check_reference) < 0) - goto error; + if (_install_preload_pkg(WGT_BACKEND_CMD, WGT_RW_DIR, false, + skip_check_reference) < 0) + goto error; - return 0; + return 0; + } + + if (op_type == INSTALL_TYPE_UNDEFINED || + strlen(pkg_path) == 0 || + strlen(pkg_type) == 0) { + _E("Invalid argument"); + return -1; + } + + if (strcmp(pkg_type, "tpk") == 0) + backend_cmd = TPK_BACKEND_CMD; + else + backend_cmd = WGT_BACKEND_CMD; + + if (_install_preload_pkg(backend_cmd, pkg_path, + (op_type == INSTALL_TYPE_PRELOAD) ? true : false, + skip_check_reference) < 0) + goto error; error: handle = open("/tmp/.preload_install_error",