Provide rpmqpack
authorAnas Nashif <anas.nashif@intel.com>
Thu, 11 Oct 2012 22:19:09 +0000 (15:19 -0700)
committerAnas Nashif <anas.nashif@intel.com>
Sun, 3 Feb 2013 00:44:15 +0000 (16:44 -0800)
a fast way to list all installed packages are
check if some package is installed. This is a hack.

Makefile.am
doc/Makefile.am
doc/rpmqpack.8 [new file with mode: 0644]
rpmqpack.c [new file with mode: 0644]

index 7683a44..d9bfc67 100644 (file)
@@ -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) \
index 5f3dbf1..3921f24 100644 (file)
@@ -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 (file)
index 0000000..36818d3
--- /dev/null
@@ -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 <mls@suse.de>
diff --git a/rpmqpack.c b/rpmqpack.c
new file mode 100644 (file)
index 0000000..731e35a
--- /dev/null
@@ -0,0 +1,59 @@
+#include <sys/types.h>
+#include <limits.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <db.h>
+
+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;
+}