Add Foreach depdency API for Archiveinfo
[platform/core/appfw/pkgmgr-info.git] / src / pkgmgrinfo_archiveinfo.c
index 0a8c2b8..d020661 100644 (file)
@@ -80,6 +80,8 @@ API int pkgmgrinfo_archiveinfo_destroy_archiveinfo(
        }
 
        free(info->icon_buf);
+       g_list_free_full(info->privilege_list, free);
+       g_list_free_full(info->dependency_list, free);
        free(info);
 
        return PMINFO_R_OK;
@@ -91,7 +93,7 @@ API int pkgmgrinfo_archiveinfo_get_pkgid(pkgmgrinfo_archiveinfo_h handle,
        package_manager_pkg_detail_info_t *info =
                (package_manager_pkg_detail_info_t *)handle;
 
-       if (info == NULL || strlen(info->pkgid)) {
+       if (info == NULL || strlen(info->pkgid) == 0 || pkgid == NULL) {
                _LOGE("invalid parameter");
                return PMINFO_R_EINVAL;
        }
@@ -107,7 +109,7 @@ API int pkgmgrinfo_archiveinfo_get_type(pkgmgrinfo_archiveinfo_h handle,
        package_manager_pkg_detail_info_t *info =
                (package_manager_pkg_detail_info_t *)handle;
 
-       if (info == NULL || strlen(info->pkg_type)) {
+       if (info == NULL || strlen(info->pkg_type) == 0 || type == NULL ) {
                _LOGE("invalid parameter");
                return PMINFO_R_EINVAL;
        }
@@ -123,7 +125,7 @@ API int pkgmgrinfo_archiveinfo_get_version(pkgmgrinfo_archiveinfo_h handle,
        package_manager_pkg_detail_info_t *info =
                (package_manager_pkg_detail_info_t *)handle;
 
-       if (info == NULL || strlen(info->version)) {
+       if (info == NULL || strlen(info->version) == 0 || version == NULL) {
                _LOGE("invalid parameter");
                return PMINFO_R_EINVAL;
        }
@@ -139,7 +141,8 @@ API int pkgmgrinfo_archiveinfo_get_api_version(pkgmgrinfo_archiveinfo_h handle,
        package_manager_pkg_detail_info_t *info =
                (package_manager_pkg_detail_info_t *)handle;
 
-       if (info == NULL || strlen(info->api_version)) {
+       if (info == NULL || strlen(info->api_version) == 0 ||
+                       api_version == NULL) {
                _LOGE("invalid parameter");
                return PMINFO_R_EINVAL;
        }
@@ -155,7 +158,7 @@ API int pkgmgrinfo_archiveinfo_get_description(pkgmgrinfo_archiveinfo_h handle,
        package_manager_pkg_detail_info_t *info =
                (package_manager_pkg_detail_info_t *)handle;
 
-       if (info == NULL) {
+       if (info == NULL || description == NULL) {
                _LOGE("invalid parameter");
                return PMINFO_R_EINVAL;
        }
@@ -174,7 +177,7 @@ API int pkgmgrinfo_archiveinfo_get_label(pkgmgrinfo_archiveinfo_h handle,
        package_manager_pkg_detail_info_t *info =
                (package_manager_pkg_detail_info_t *)handle;
 
-       if (info == NULL) {
+       if (info == NULL || label == NULL) {
                _LOGE("invalid parameter");
                return PMINFO_R_EINVAL;
        }
@@ -193,7 +196,7 @@ API int pkgmgrinfo_archiveinfo_get_author(pkgmgrinfo_archiveinfo_h handle,
        package_manager_pkg_detail_info_t *info =
                (package_manager_pkg_detail_info_t *)handle;
 
-       if (info == NULL) {
+       if (info == NULL || author == NULL) {
                _LOGE("invalid parameter");
                return PMINFO_R_EINVAL;
        }
@@ -212,7 +215,7 @@ API int pkgmgrinfo_archiveinfo_get_icon(pkgmgrinfo_archiveinfo_h handle,
        package_manager_pkg_detail_info_t *info =
                (package_manager_pkg_detail_info_t *)handle;
 
-       if (info == NULL) {
+       if (info == NULL || icon == NULL || size == NULL) {
                _LOGE("invalid parameter");
                return PMINFO_R_EINVAL;
        }
@@ -220,8 +223,35 @@ API int pkgmgrinfo_archiveinfo_get_icon(pkgmgrinfo_archiveinfo_h handle,
        if (info->icon_buf == NULL)
                return PMINFO_R_ENOENT;
 
-       *icon = info->icon_buf;
+       *icon = (unsigned char *)info->icon_buf;
        *size = info->icon_size;
 
        return PMINFO_R_OK;
 }
+
+API int pkgmgrinfo_archiveinfo_foreach_dependency(
+               pkgmgrinfo_archiveinfo_h handle,
+               pkgmgrinfo_pkg_dependency_list_cb callback, void *user_data)
+{
+       GList *tmp;
+       pkg_dependency_info_t *dependency_info;
+       package_manager_pkg_detail_info_t *info =
+               (package_manager_pkg_detail_info_t *)handle;
+
+       if (info == NULL || callback == NULL) {
+               _LOGE("invalid parameter");
+               return PMINFO_R_EINVAL;
+       }
+
+       for (tmp = info->dependency_list; tmp != NULL;
+                       tmp = g_list_next(tmp)) {
+               dependency_info = (pkg_dependency_info_t *)tmp->data;
+               if (callback(info->pkgid,
+                               dependency_info->pkgid,
+                               dependency_info->type,
+                               dependency_info->required_version,
+                               user_data) != 0)
+                       return PMINFO_R_ERROR;
+       }
+       return PMINFO_R_OK;
+}