From: Sangyoon Jang Date: Mon, 11 Mar 2019 08:31:31 +0000 (+0900) Subject: Fix dependency info callback signature and API name X-Git-Tag: accepted/tizen/unified/20190322.075508~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b31e55fcc53910f6eef5e04922cb9a4f3e867a08;p=platform%2Fcore%2Fappfw%2Fpkgmgr-info.git Fix dependency info callback signature and API name - Pass both pkgid of dependency info. - API name changed to pkgmgrinfo_pkginfo_foreach_depends_on Change-Id: Iea3a8e1694f352a4357bc1e18bfb8b2d1e7eb056 Signed-off-by: Sangyoon Jang --- diff --git a/include/pkgmgr-info.h b/include/pkgmgr-info.h index 0a4c9b3..0634127 100644 --- a/include/pkgmgr-info.h +++ b/include/pkgmgr-info.h @@ -6353,10 +6353,10 @@ int pkgmgrinfo_compare_package_version(const char *current_version, * @pre pkgmgrinfo_pkginfo_get_pkginfo() * @post pkgmgrinfo_pkginfo_destroy_pkginfo() * @code -int dependency_cb(const char *pkgid, const char *type, +int dependency_cb(const char *from const char *to, const char *type, const char *required_version,void *user_data) { - printf("this package %s %s", type, pkgid); + printf("this package %s %s", type, to); if (required_version) printf("required version : %s", required_version); return 0; @@ -6384,10 +6384,11 @@ int pkgmgrinfo_pkginfo_foreach_dependency(pkgmgrinfo_pkginfo_h handle, void *user_data); /** - * @fn int pkgmgrinfo_pkginfo_foreach_required_by(pkgmgrinfo_pkginfo_h handle, + * @fn int pkgmgrinfo_pkginfo_foreach_depends_on(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_pkg_dependency_list_cb dependency_cb, void *user_data); - * @brief This API gets the list of packages which has dependency of a particular package + * @brief This API gets the list of packages which has dependency directly + * and indirectly of a particular package * * @par This API is for package-manager client application * @par Sync (or) Async : Synchronous API @@ -6401,23 +6402,23 @@ int pkgmgrinfo_pkginfo_foreach_dependency(pkgmgrinfo_pkginfo_h handle, * @pre pkgmgrinfo_pkginfo_get_pkginfo() * @post pkgmgrinfo_pkginfo_destroy_pkginfo() * @code -int dependency_cb(const char *pkgid, const char *type, +int dependency_cb(const char *from, const char *to, const char *type, const char *required_version,void *user_data) { - printf("%s %s this package", pkgid, type); + printf("%s %s %s package", from, to, type); if (required_version) printf("required version : %s", required_version); return 0; } -static int list_required_by(const char *package) +static int list_depends_on(const char *package) { int ret = 0; pkgmgrinfo_pkginfo_h handle; ret = pkgmgrinfo_pkginfo_get_pkginfo(package, &handle); if (ret != PMINFO_R_OK) return -1; - ret = pkgmgrinfo_pkginfo_foreach_required_by(handle, dependency_cb, NULL); + ret = pkgmgrinfo_pkginfo_foreach_depends_on(handle, dependency_cb, NULL); if (ret != PMINFO_R_OK) { pkgmgrinfo_pkginfo_destroy_pkginfo(handle); return -1; @@ -6427,7 +6428,7 @@ static int list_required_by(const char *package) } * @endcode */ -int pkgmgrinfo_pkginfo_foreach_required_by(pkgmgrinfo_pkginfo_h handle, +int pkgmgrinfo_pkginfo_foreach_depends_on(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_pkg_dependency_list_cb dependency_cb, void *user_data); diff --git a/include/pkgmgrinfo_type.h b/include/pkgmgrinfo_type.h index 5b7ee08..758392d 100644 --- a/include/pkgmgrinfo_type.h +++ b/include/pkgmgrinfo_type.h @@ -329,11 +329,12 @@ typedef int (*pkgmgrinfo_pkg_appdefined_privilege_list_cb) (const char *privileg const char *license_path, void *user_data); /** - * @fn int (*pkgmgrinfo_pkg_dependency_list_cb) (const char *pkgid, const char *type, const char *required_version, void *user_data) + * @fn int (*pkgmgrinfo_pkg_dependency_list_cb) (const char *from, const char *to, const char *type, const char *required_version, void *user_data) * * @brief Specifies the dependency info of given package passed to pkgmgrinfo_pkginfo_foreach_dependency() or pkgmgrinfo_pkginfo_foreach_required_by() * - * @param[in] pkgid the pkgid which has dependency with given package + * @param[in] from the pkgid which depends other package + * @param[in] to the pkgid which has dependency with given package * @param[in] type type of dependency * @param[in] required_version required version of dependency * @param[in] user_data user data passed @@ -343,7 +344,7 @@ typedef int (*pkgmgrinfo_pkg_appdefined_privilege_list_cb) (const char *privileg * @see pkgmgrinfo_pkginfo_foreach_dependency() * @see pkgmgrinfo_pkginfo_foreach_required_by() */ -typedef int (*pkgmgrinfo_pkg_dependency_list_cb) (const char *pkgid, +typedef int (*pkgmgrinfo_pkg_dependency_list_cb) (const char *from, const char *to, const char *type, const char *required_version, void *user_data); diff --git a/src/pkgmgrinfo_pkginfo.c b/src/pkgmgrinfo_pkginfo.c index d7a6a52..6d7dbfa 100644 --- a/src/pkgmgrinfo_pkginfo.c +++ b/src/pkgmgrinfo_pkginfo.c @@ -2154,7 +2154,8 @@ API int pkgmgrinfo_pkginfo_foreach_dependency(pkgmgrinfo_pkginfo_h handle, dependency = (dependency_x *)tmp->data; if (dependency == NULL) continue; - ret = dependency_cb(dependency->depends_on, dependency->type, + ret = dependency_cb(info->pkg_info->package, + dependency->depends_on, dependency->type, dependency->required_version, user_data); if (ret < 0) break; @@ -2163,21 +2164,22 @@ API int pkgmgrinfo_pkginfo_foreach_dependency(pkgmgrinfo_pkginfo_h handle, return PMINFO_R_OK; } -struct required_by { - char *pkgid; +struct depends_on { + char *from; + char *to; char *type; char *version; }; -static int _get_required_by(sqlite3 *db, const char *pkgid, GQueue **queue, +static int _get_depends_on(sqlite3 *db, const char *pkgid, GQueue **queue, GHashTable **table, GList **pkg_list) { static const char query[] = - "SELECT package, type, required_version " + "SELECT package, depends_on, type, required_version " "FROM package_dependency_info WHERE depends_on=?"; int ret; sqlite3_stmt *stmt; - struct required_by *req; + struct depends_on *req; /* already checked */ if (!g_hash_table_insert(*table, strdup(pkgid), GINT_TO_POINTER(1))) @@ -2197,18 +2199,19 @@ static int _get_required_by(sqlite3 *db, const char *pkgid, GQueue **queue, } while (sqlite3_step(stmt) == SQLITE_ROW) { - req = calloc(1, sizeof(struct required_by)); + req = calloc(1, sizeof(struct depends_on)); if (req == NULL) { LOGE("out of memory"); sqlite3_finalize(stmt); return PMINFO_R_ERROR; } - _save_column_str(stmt, 0, &req->pkgid); - _save_column_str(stmt, 1, &req->type); - _save_column_str(stmt, 2, &req->version); + _save_column_str(stmt, 0, &req->from); + _save_column_str(stmt, 1, &req->to); + _save_column_str(stmt, 2, &req->type); + _save_column_str(stmt, 3, &req->version); *pkg_list = g_list_append(*pkg_list, req); - g_queue_push_tail(*queue, strdup(req->pkgid)); + g_queue_push_tail(*queue, strdup(req->from)); } sqlite3_finalize(stmt); @@ -2216,7 +2219,7 @@ static int _get_required_by(sqlite3 *db, const char *pkgid, GQueue **queue, return PMINFO_R_OK; } -static int _pkginfo_foreach_required_by(uid_t uid, const char *pkgid, +static int _pkginfo_foreach_depends_on(uid_t uid, const char *pkgid, GList **pkg_list) { int ret; @@ -2250,10 +2253,10 @@ static int _pkginfo_foreach_required_by(uid_t uid, const char *pkgid, g_queue_push_tail(queue, strdup(pkgid)); while (!g_queue_is_empty(queue)) { item = g_queue_pop_head(queue); - ret = _get_required_by(db, item, &queue, &table, pkg_list); + ret = _get_depends_on(db, item, &queue, &table, pkg_list); free(item); if (ret != PMINFO_R_OK) { - LOGE("failed to get required by pkgs"); + LOGE("failed to get pkgs depends on %s", pkgid); g_hash_table_destroy(table); g_queue_free_full(queue, free); sqlite3_close_v2(db); @@ -2268,17 +2271,18 @@ static int _pkginfo_foreach_required_by(uid_t uid, const char *pkgid, return PMINFO_R_OK; } -static void __free_required_by(gpointer data) +static void __free_depends_on(gpointer data) { - struct required_by *req = (struct required_by *)data; + struct depends_on *dep = (struct depends_on *)data; - free(req->pkgid); - free(req->type); - free(req->version); - free(req); + free(dep->from); + free(dep->to); + free(dep->type); + free(dep->version); + free(dep); } -API int pkgmgrinfo_pkginfo_foreach_required_by(pkgmgrinfo_pkginfo_h handle, +API int pkgmgrinfo_pkginfo_foreach_depends_on(pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_pkg_dependency_list_cb dependency_cb, void *user_data) { @@ -2286,33 +2290,33 @@ API int pkgmgrinfo_pkginfo_foreach_required_by(pkgmgrinfo_pkginfo_h handle, pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle; GList *pkg_list = NULL; GList *l; - struct required_by *req; + struct depends_on *dep; if (handle == NULL || dependency_cb == NULL || info->pkg_info == NULL) { LOGE("invalid parameter"); return PMINFO_R_EINVAL; } - ret = _pkginfo_foreach_required_by(info->uid, info->pkg_info->package, + ret = _pkginfo_foreach_depends_on(info->uid, info->pkg_info->package, &pkg_list); if (ret == PMINFO_R_OK && info->uid != GLOBAL_USER) - ret = _pkginfo_foreach_required_by(GLOBAL_USER, + ret = _pkginfo_foreach_depends_on(GLOBAL_USER, info->pkg_info->package, &pkg_list); if (ret != PMINFO_R_OK) { - g_list_free_full(pkg_list, __free_required_by); + g_list_free_full(pkg_list, __free_depends_on); return ret; } for (l = pkg_list; l != NULL; l = l->next) { - req = (struct required_by *)l->data; - ret = dependency_cb(req->pkgid, req->type, req->version, + dep = (struct depends_on *)l->data; + ret = dependency_cb(dep->from, dep->to, dep->type, dep->version, user_data); if (ret < 0) break; } - g_list_free_full(pkg_list, __free_required_by); + g_list_free_full(pkg_list, __free_depends_on); return PMINFO_R_OK; }