From: Anas Nashif Date: Thu, 11 Oct 2012 22:19:09 +0000 (-0700) Subject: Provide rpmqpack X-Git-Tag: accepted/trunk/20130203.005124~55 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=653556333b87fdab40001068671f029829de6d2a;p=platform%2Fupstream%2Frpm.git Provide rpmqpack a fast way to list all installed packages are check if some package is installed. This is a hack. --- diff --git a/Makefile.am b/Makefile.am index 7683a44..d9bfc67 100644 --- a/Makefile.am +++ b/Makefile.am @@ -173,6 +173,10 @@ rpmgraph_LDADD = lib/librpm.la rpmio/librpmio.la @WITH_POPT_LIB@ dist_bin_SCRIPTS = scripts/gendiff +bin_PROGRAMS += rpmqpack +rpmqpack_SOURCES = rpmqpack.c +rpmqpack_LDADD = lib/librpm.la + rpmconfig_DATA = rpmrc rpmrc: $(top_srcdir)/rpmrc.in @$(SED) \ diff --git a/doc/Makefile.am b/doc/Makefile.am index 5f3dbf1..3921f24 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -8,7 +8,7 @@ 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 += rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8 +man_man8_DATA += rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8 rpmqpack.8 EXTRA_DIST += $(man_man8_DATA) man_fr_man8dir = $(mandir)/fr/man8 diff --git a/doc/rpmqpack.8 b/doc/rpmqpack.8 new file mode 100644 index 0000000..36818d3 --- /dev/null +++ b/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 diff --git a/rpmqpack.c b/rpmqpack.c new file mode 100644 index 0000000..731e35a --- /dev/null +++ b/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_UNKNOWN, 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; +}