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 @@ -41,7 +41,7 @@ rpmbin_PROGRAMS = rpm bin_PROGRAMS = rpm2cpio pkglibdir = @RPMCONFIGDIR@ -pkglib_PROGRAMS = rpmb rpmd rpmi rpmk rpmq +pkglib_PROGRAMS = rpmb rpmd rpmi rpmk rpmq rpmqpack pkglib_DATA = rpmrc rpmpopt-$(VERSION) macros pkglib_SCRIPTS = find-provides find-requires mkinstalldirs \ config.guess config.sub config.site @@ -93,6 +93,12 @@ rpm2cpio_SOURCES = $(top_srcdir)/rpm2cpi rpm2cpio_LDFLAGS = $(myLDFLAGS) rpm2cpio_LDADD = $(myLDADD) @LIBMISC@ +rpmqpack_SOURCES = rpmqpack.c +rpmqpack_LDFLAGS = $(myLDFLAGS) +rpmqpack_LDADD = $(top_builddir)/rpmdb/librpmdb.la \ + $(top_builddir)/rpmio/librpmio.la \ + $(top_builddir)/popt/libpopt.la + $(PROGRAMS): $(myLDADD) @WITH_APIDOCS_TARGET@ .PHONY: splint @@ -138,6 +144,8 @@ install-data-local: @LN_S@ ../lib/rpm/rpmv $(DESTDIR)$(bindir)/rpmverify rm -f $(DESTDIR)$(bindir)/rpmsign @LN_S@ ../lib/rpm/rpmk $(DESTDIR)$(bindir)/rpmsign + rm -f $(DESTDIR)$(bindir)/rpmqpack + @LN_S@ ../lib/rpm/rpmqpack $(DESTDIR)$(bindir)/rpmqpack rm -f $(DESTDIR)$(bindir)/rpmdb ; \ @LN_S@ ../lib/rpm/rpmd $(DESTDIR)$(bindir)/rpmdb ; \ for bf in e i u ; do \ Index: doc/Makefile.am =================================================================== --- doc/Makefile.am.orig +++ doc/Makefile.am @@ -2,6 +2,6 @@ SUBDIRS = manual fr ja ko pl ru sk -man_MANS = gendiff.1 rpm.8 rpmbuild.8 rpmcache.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8 +man_MANS = gendiff.1 rpm.8 rpmbuild.8 rpmcache.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8 rpmqpack.8 EXTRA_DIST = $(man_MANS) 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; +}