Fix dependency info callback signature and API name 98/201198/7
authorSangyoon Jang <jeremy.jang@samsung.com>
Mon, 11 Mar 2019 08:31:31 +0000 (17:31 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Tue, 19 Mar 2019 08:40:26 +0000 (17:40 +0900)
- Pass both pkgid of dependency info.
- API name changed to pkgmgrinfo_pkginfo_foreach_depends_on

Change-Id: Iea3a8e1694f352a4357bc1e18bfb8b2d1e7eb056
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
include/pkgmgr-info.h
include/pkgmgrinfo_type.h
src/pkgmgrinfo_pkginfo.c

index 0a4c9b3..0634127 100644 (file)
@@ -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);
 
index 5b7ee08..758392d 100644 (file)
@@ -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);
 
index d7a6a52..6d7dbfa 100644 (file)
@@ -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;
 }