예제 #1
0
파일: search.c 프로젝트: hguemar/tdnf
uint32_t
TDNFQueryTermsHelper(
    HyPackageList hAccumPkgList,
    HyQuery hQuery,
    int nKeyId,
    const char* pszMatch
    )
{
    HyPackageList hPkgList = NULL;
    HyPackage hPkg = NULL;
    uint32_t unError = 0;
    int nIndex = 0;

    if(!hAccumPkgList || !hQuery || !pszMatch)
    {
        unError = ERROR_TDNF_INVALID_PARAMETER;
        goto error;
    }

    unError = hy_query_filter(
                  hQuery,
                  nKeyId,
                  HY_GLOB | HY_ICASE,
                  pszMatch);
    BAIL_ON_TDNF_HAWKEY_ERROR(unError);

    hPkgList = hy_query_run(hQuery);
    if(!hPkgList)
    {
        unError = HY_E_IO;
        BAIL_ON_TDNF_HAWKEY_ERROR(unError);
    }

    FOR_PACKAGELIST(hPkg, hPkgList, nIndex)
    {
        if (!hy_packagelist_has(hAccumPkgList, hPkg))
        {
            hy_packagelist_push(hAccumPkgList, hy_package_link(hPkg));
        }
    }

cleanup:
    if (hPkgList != NULL)
    {
       hy_packagelist_free(hPkgList);
    }

    if (hQuery != NULL)
    {
        hy_query_clear(hQuery);
    }

    return unError;
error:
    goto cleanup;
}
예제 #2
0
파일: hif-goal.c 프로젝트: juhp/libhif
/**
 * hif_goal_get_packages:
 */
GPtrArray *
hif_goal_get_packages (HyGoal goal, ...)
{
	GPtrArray *array;
	HyPackage pkg;
	gint info_tmp;
	guint i;
	guint j;
	va_list args;

	/* process the valist */
	va_start (args, goal);
	array = g_ptr_array_new_with_free_func ((GDestroyNotify) hy_package_free);
	for (j = 0;; j++) {
		HyPackageList pkglist = NULL;
		info_tmp = va_arg (args, gint);
		if (info_tmp == -1)
			break;
		switch (info_tmp) {
		case HIF_PACKAGE_INFO_REMOVE:
			pkglist = hy_goal_list_erasures (goal);
			FOR_PACKAGELIST(pkg, pkglist, i) {
				hif_package_set_action (pkg, HIF_STATE_ACTION_REMOVE);
				g_ptr_array_add (array, hy_package_link (pkg));
			}
			break;
		case HIF_PACKAGE_INFO_INSTALL:
			pkglist = hy_goal_list_installs (goal);
			FOR_PACKAGELIST(pkg, pkglist, i) {
				hif_package_set_action (pkg, HIF_STATE_ACTION_INSTALL);
				g_ptr_array_add (array, hy_package_link (pkg));
			}
			break;
		case HIF_PACKAGE_INFO_OBSOLETE:
			pkglist = hy_goal_list_obsoleted (goal);
			FOR_PACKAGELIST(pkg, pkglist, i) {
				hif_package_set_action (pkg, HIF_STATE_ACTION_OBSOLETE);
				g_ptr_array_add (array, hy_package_link (pkg));
			}
예제 #3
0
파일: test_goal.c 프로젝트: mtoman/hawkey
static int
solution_cb(HyGoal goal, void *data)
{
    struct Solutions *solutions = (struct Solutions*)data;
    solutions->solutions++;

    HyPackageList new_installs = hy_goal_list_installs(goal);
    HyPackage pkg;
    int i;

    FOR_PACKAGELIST(pkg, new_installs, i)
	if (!hy_packagelist_has(solutions->installs, pkg))
	    hy_packagelist_push(solutions->installs, hy_package_link(pkg));
    hy_packagelist_free(new_installs);

    return 0;
}
예제 #4
0
파일: packagelist.c 프로젝트: Xake/hawkey
/**
 * Returns the package at position 'index'.
 *
 * Gives caller a new reference to the package that can survive the
 * packagelist. The returned package has to be freed via hy_package_free().
 */
HyPackage
hy_packagelist_get_clone(HyPackageList plist, int index)
{
    return hy_package_link(hy_packagelist_get(plist, index));
}