Release version 0.26.1
[platform/core/appfw/pkgmgr-info.git] / src / pkgmgrinfo_pkginfo.c
index 4cf0cff..b72c63d 100644 (file)
@@ -1149,6 +1149,22 @@ API int pkgmgrinfo_pkginfo_is_for_all_users(pkgmgrinfo_pkginfo_h handle, bool *f
        return pkgmgrinfo_pkginfo_is_global(handle, for_all_users);
 }
 
+API int pkgmgrinfo_pkginfo_is_lib(pkgmgrinfo_pkginfo_h handle, bool *lib)
+{
+       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
+
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n");
+       retvm_if(lib == NULL, PMINFO_R_EINVAL,
+                       "Argument supplied to hold return value is NULL\n");
+
+       if (info->pkg_info == NULL || info->pkg_info->lib == NULL)
+               return PMINFO_R_ERROR;
+
+       *lib = _get_bool_value(info->pkg_info->lib);
+
+       return PMINFO_R_OK;
+}
+
 API int pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo_h handle)
 {
        pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
@@ -1531,22 +1547,22 @@ static void __free_depends_on(gpointer data)
        pkgmgrinfo_basic_free_dependency(dep);
 }
 
-API int pkgmgrinfo_pkginfo_foreach_depends_on(pkgmgrinfo_pkginfo_h handle,
+/* This API is not exported at the header file */
+API int pkgmgrinfo_pkginfo_foreach_depends_on_by_pkgid(const char *pkgid,
                pkgmgrinfo_pkg_dependency_list_cb dependency_cb,
-               void *user_data)
+               void *user_data, uid_t uid)
 {
        int ret;
-       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
        GList *pkg_list = NULL;
        GList *l;
        dependency_x *dep;
 
-       if (handle == NULL || dependency_cb == NULL || info->pkg_info == NULL) {
+       if (pkgid == NULL || dependency_cb == NULL) {
                LOGE("invalid parameter");
                return PMINFO_R_EINVAL;
        }
 
-       ret = _pkginfo_get_depends_on(info->uid, info->pkg_info->package, &pkg_list);
+       ret = _pkginfo_get_depends_on(uid, pkgid, &pkg_list);
        if (ret != PMINFO_R_OK)
                return PMINFO_R_ERROR;
 
@@ -1562,6 +1578,22 @@ API int pkgmgrinfo_pkginfo_foreach_depends_on(pkgmgrinfo_pkginfo_h handle,
        return PMINFO_R_OK;
 }
 
+API int pkgmgrinfo_pkginfo_foreach_depends_on(pkgmgrinfo_pkginfo_h handle,
+               pkgmgrinfo_pkg_dependency_list_cb dependency_cb,
+               void *user_data)
+{
+       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
+
+       if (handle == NULL || dependency_cb == NULL || info->pkg_info == NULL) {
+               LOGE("invalid parameter");
+               return PMINFO_R_EINVAL;
+       }
+
+       return pkgmgrinfo_pkginfo_foreach_depends_on_by_pkgid(
+                        info->pkg_info->package, dependency_cb, user_data,
+                        info->uid);
+}
+
 API int pkgmgrinfo_pkginfo_foreach_res_allowed_package(
                pkgmgrinfo_pkginfo_h handle,
                pkgmgrinfo_res_allowed_package_list_cb res_allowed_package_cb,
@@ -1840,3 +1872,35 @@ API int pkgmgrinfo_pkginfo_metadata_filter_foreach(
        return pkgmgrinfo_pkginfo_usr_metadata_filter_foreach(handle, pkg_cb,
                        user_data, _getuid());
 }
+
+API int pkgmgrinfo_pkginfo_get_metadata_value(
+               pkgmgrinfo_pkginfo_h handle, const char *metadata_key,
+               char **metadata_value)
+{
+       retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL");
+       retvm_if(metadata_key == NULL, PMINFO_R_EINVAL, "metadata_key is NULL");
+       retvm_if(metadata_value == NULL, PMINFO_R_EINVAL,
+                       "metadata_value is NULL");
+
+       GList *list_md = NULL;
+       metadata_x *metadata = NULL;
+       pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle;
+
+       list_md = info->pkg_info->metadata;
+
+       for (; list_md; list_md = list_md->next) {
+               metadata = (metadata_x *)list_md->data;
+               if (metadata && metadata->key) {
+                       if (strcasecmp(metadata->key, metadata_key) == 0) {
+                               if (metadata->value == NULL)
+                                       *metadata_value = "";
+                               else
+                                       *metadata_value =
+                                                       (char *)metadata->value;
+                               return PMINFO_R_OK;
+                       }
+               }
+       }
+
+       return PMINFO_R_EINVAL;
+}