ALPM

 view release on metacpan or  search on metacpan

xs/DB.xs  view on Meta::CPAN

#------------------------
# PUBLIC DATABASE METHODS
#------------------------

MODULE = ALPM	PACKAGE = ALPM::DB

void
pkgs(db)
	ALPM_DB db
 PREINIT:
	alpm_list_t *pkgs;
 PPCODE:
	pkgs = alpm_db_get_pkgcache(db);
	# If pkgs is NULL, we can't report the error because errno is in the handle object.
	LIST2STACK(pkgs, c2p_pkg);

# groups returns a list of pairs. Each pair is a group name followed by
# an array ref of packages belonging to the group.

void
groups(db)
	ALPM_DB db
 PREINIT:
	alpm_list_t *grps;
	alpm_group_t *grp;
	AV *pkgarr;
 PPCODE:
	grps = alpm_db_get_groupcache(db);
	while(grps){
		grp = grps->data;
		XPUSHs(sv_2mortal(newSVpv(grp->name, strlen(grp->name))));
		pkgarr = list2av(grp->packages, c2p_pkg);
		XPUSHs(sv_2mortal(newRV_noinc((SV*)pkgarr)));
		grps = alpm_list_next(grps);
	}

const char *
name(db)
	ALPM_DB db
 CODE:
	RETVAL = alpm_db_get_name(db);
 OUTPUT:
	RETVAL

SV *
find(db, name)
	ALPM_DB db
	const char *name
 PREINIT:
	ALPM_Package pkg;
 CODE:
	pkg = alpm_db_get_pkg(db, name);
	RETVAL = (pkg == NULL ? &PL_sv_undef
		: c2p_pkg(pkg));
 OUTPUT:
	RETVAL

void
find_group(db, name)
	ALPM_DB db
	const char *name
 PREINIT:
	alpm_group_t *grp;
	alpm_list_t *pkgs;
 PPCODE:
	grp = alpm_db_get_group(db, name);
	if(grp){
		pkgs = grp->packages;
		LIST2STACK(pkgs, c2p_pkg);
	}

void
search(db, ...)
	ALPM_DB db
 PREINIT:
	alpm_list_t *L, *terms, *fnd;
	int i;
 PPCODE:
	i = 1;
	STACK2LIST(i, terms, p2c_str);
	L = fnd = alpm_db_search(db, terms);
	ZAPLIST(terms, free);
	LIST2STACK(fnd, c2p_pkg);
	alpm_list_free(L);

#-----------------------------
# PUBLIC LOCAL DATABASE METHODS
#-----------------------------

MODULE = ALPM   PACKAGE = ALPM::DB::Local



( run in 1.137 second using v1.01-cache-2.11-cpan-39bf76dae61 )