Provide rpmqpack, a fast way to list all installed packages are check if some package is installed. This is a hack. Index: Makefile.am =================================================================== --- Makefile.am.orig +++ Makefile.am @@ -139,6 +139,10 @@ check_PROGRAMS += rpmsort rpmsort_SOURCES = tools/rpmsort.c rpmsort_LDADD = lib/librpm.la +bin_PROGRAMS += rpmqpack +rpmqpack_SOURCES = rpmqpack.c +rpmqpack_LDADD = lib/librpm.la + rpmconfig_DATA = rpmrc rpmrc: $(top_srcdir)/rpmrc.in @$(SED) \ Index: doc/Makefile.am =================================================================== --- doc/Makefile.am.orig +++ doc/Makefile.am @@ -7,7 +7,7 @@ man_man1_DATA = gendiff.1 EXTRA_DIST += $(man_man1_DATA) man_man8dir = $(mandir)/man8 -man_man8_DATA = rpm.8 rpmbuild.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8 +man_man8_DATA = rpm.8 rpmbuild.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8 rpmqpack.8 EXTRA_DIST += $(man_man8_DATA) man_fr_man8dir = $(mandir)/fr/man8 Index: doc/rpmqpack.8 =================================================================== --- /dev/null +++ doc/rpmqpack.8 @@ -0,0 +1,25 @@ +.TH RPMQPACK 8 "Mar 2002" +.SH NAME +rpmqpack \- check for installed rpm packages + +.SH SYNOPSIS +.B rpmqpack +.RI [ pack1 "] [" pack2 ]... + +.SH DESCRIPTION +rpmqpack checks if packages given as arguments are installed in +the system. It prints each installed package to stdout. +If no arguments are given all installed packages are printed. + +.SH EXIT STATUS +rpmqpack returns 0 if all given packages are installed, otherwise +1. + +.SH SEE ALSO +.BR rpm (1) + +.SH COPYRIGHT +2002 SuSE Linux AG Nuernberg, Germany. + +.SH AUTHOR +Michael Schroeder Index: rpmqpack.c =================================================================== --- /dev/null +++ rpmqpack.c @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include +#include + +#include + +DBT key; +DBT data; + +int +main(int argc, char **argv) +{ + DB *db = 0; + DBC *dbc = 0; + int ret = 0; + + if (db_create(&db, 0, 0)) + { + perror("db_create"); + exit(1); + } + if (db->open(db, 0, "/var/lib/rpm/Name", 0, DB_HASH, DB_RDONLY, 0664)) + { + perror("db->open"); + exit(1); + } + if (argc == 1) + { + if (db->cursor(db, NULL, &dbc, 0)) + { + perror("db->cursor"); + exit(1); + } + while (dbc->c_get(dbc, &key, &data, DB_NEXT) == 0) + printf("%*.*s\n", (int)key.size, (int)key.size, (char *)key.data); + dbc->c_close(dbc); + } + else + { + argc--; + while (argc--) + { + argv++; + key.data = (void *)*argv; + key.size = strlen(*argv); + data.data = NULL; + data.size = 0; + if (db->get(db, 0, &key, &data, 0) == 0) + printf("%s\n", *argv); + else + ret = 1; + } + } + db->close(db, 0); + return ret; +}