Blame rpmqpack.diff

Bernhard M. Wiedemann 1250f9
--- ./Makefile.am.orig	2017-12-01 15:04:09.723014378 +0000
Bernhard M. Wiedemann 1250f9
+++ ./Makefile.am	2017-12-01 15:04:13.396003910 +0000
Bernhard M. Wiedemann 1250f9
@@ -187,6 +187,10 @@ rpmgraph_LDADD =	lib/librpm.la rpmio/lib
Bernhard M. Wiedemann 1250f9
 
Bernhard M. Wiedemann 1250f9
 dist_bin_SCRIPTS =	scripts/gendiff
Bernhard M. Wiedemann 1250f9
 
Bernhard M. Wiedemann 1250f9
+bin_PROGRAMS +=		rpmqpack
Bernhard M. Wiedemann 1250f9
+rpmqpack_SOURCES =      rpmqpack.c
Bernhard M. Wiedemann 1250f9
+rpmqpack_LDADD =        lib/librpm.la
Bernhard M. Wiedemann 1250f9
+
Bernhard M. Wiedemann 1250f9
 rpmconfig_DATA = rpmrc
Bernhard M. Wiedemann 1250f9
 rpmrc: $(top_srcdir)/rpmrc.in
Bernhard M. Wiedemann 1250f9
 	@$(SED) \
Bernhard M. Wiedemann 1250f9
--- ./doc/Makefile.am.orig	2017-12-01 15:04:13.397003907 +0000
Bernhard M. Wiedemann 1250f9
+++ ./doc/Makefile.am	2017-12-01 15:04:42.681920389 +0000
Bernhard M. Wiedemann 1250f9
@@ -8,7 +8,7 @@ EXTRA_DIST += $(man_man1_DATA)
Bernhard M. Wiedemann 1250f9
 
Bernhard M. Wiedemann 1250f9
 man_man8dir = $(mandir)/man8
Bernhard M. Wiedemann 1250f9
 man_man8_DATA = rpm.8 rpm-misc.8 rpmbuild.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8
Bernhard M. Wiedemann 1250f9
-man_man8_DATA += rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8
Bernhard M. Wiedemann 1250f9
+man_man8_DATA += rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8 rpmqpack.8
Bernhard M. Wiedemann 1250f9
 man_man8_DATA += rpm-plugin-systemd-inhibit.8
Bernhard M. Wiedemann 1250f9
 EXTRA_DIST += $(man_man8_DATA)
Bernhard M. Wiedemann 1250f9
 
Bernhard M. Wiedemann 1250f9
--- ./doc/rpmqpack.8.orig	2017-12-01 15:04:13.397003907 +0000
Bernhard M. Wiedemann 1250f9
+++ ./doc/rpmqpack.8	2017-12-01 15:04:13.397003907 +0000
Bernhard M. Wiedemann 1250f9
@@ -0,0 +1,25 @@
Bernhard M. Wiedemann 1250f9
+.TH RPMQPACK 8 "Mar 2002"
Bernhard M. Wiedemann 1250f9
+.SH NAME
Bernhard M. Wiedemann 1250f9
+rpmqpack \- check for installed rpm packages
Bernhard M. Wiedemann 1250f9
+
Bernhard M. Wiedemann 1250f9
+.SH SYNOPSIS
Bernhard M. Wiedemann 1250f9
+.B rpmqpack
Bernhard M. Wiedemann 1250f9
+.RI [ pack1 "] [" pack2 ]...
Bernhard M. Wiedemann 1250f9
+
Bernhard M. Wiedemann 1250f9
+.SH DESCRIPTION
Bernhard M. Wiedemann 1250f9
+rpmqpack checks if packages given as arguments are installed in
Bernhard M. Wiedemann 1250f9
+the system. It prints each installed package to stdout.
Bernhard M. Wiedemann 1250f9
+If no arguments are given all installed packages are printed.
Bernhard M. Wiedemann 1250f9
+
Bernhard M. Wiedemann 1250f9
+.SH EXIT STATUS
Bernhard M. Wiedemann 1250f9
+rpmqpack returns 0 if all given packages are installed, otherwise
Bernhard M. Wiedemann 1250f9
+1.
Bernhard M. Wiedemann 1250f9
+
Bernhard M. Wiedemann 1250f9
+.SH SEE ALSO
Bernhard M. Wiedemann 1250f9
+.BR rpm (1)
Bernhard M. Wiedemann 1250f9
+
Bernhard M. Wiedemann 1250f9
+.SH COPYRIGHT
Bernhard M. Wiedemann 1250f9
+2002 SUSE Linux AG Nuernberg, Germany.
Bernhard M. Wiedemann 1250f9
+
Bernhard M. Wiedemann 1250f9
+.SH AUTHOR
Bernhard M. Wiedemann 1250f9
+Michael Schroeder <mls@suse.de>
Bernhard M. Wiedemann 018f1b
--- ./rpmqpack.c.orig	2019-12-06 10:14:03.989178873 +0000
Bernhard M. Wiedemann 018f1b
+++ ./rpmqpack.c	2019-12-06 10:32:16.430275015 +0000
Bernhard M. Wiedemann 018f1b
@@ -0,0 +1,60 @@
Bernhard M. Wiedemann 1250f9
+#include <sys/types.h>
Bernhard M. Wiedemann 1250f9
+#include <limits.h>
Bernhard M. Wiedemann 1250f9
+#include <fcntl.h>
Bernhard M. Wiedemann 1250f9
+#include <stdio.h>
Bernhard M. Wiedemann 1250f9
+#include <stdlib.h>
Bernhard M. Wiedemann 1250f9
+#include <string.h>
Bernhard M. Wiedemann 1250f9
+
Bernhard M. Wiedemann 018f1b
+#include <rpm/rpmts.h>
Bernhard M. Wiedemann 018f1b
+#include <rpm/rpmdb.h>
Bernhard M. Wiedemann 018f1b
+#include <rpm/rpmmacro.h>
Bernhard M. Wiedemann 1250f9
+
Bernhard M. Wiedemann 1250f9
+int
Bernhard M. Wiedemann 1250f9
+main(int argc, char **argv)
Bernhard M. Wiedemann 1250f9
+{
Bernhard M. Wiedemann 1250f9
+  int ret = 0;
Bernhard M. Wiedemann 018f1b
+  rpmts ts;
Bernhard M. Wiedemann 1250f9
+
Bernhard M. Wiedemann 018f1b
+  rpmDefineMacro(NULL, "_dbpath /var/lib/rpm", 0);
Bernhard M. Wiedemann 018f1b
+  ts = rpmtsCreate();
Bernhard M. Wiedemann 018f1b
+  if (!ts)
Bernhard M. Wiedemann 1250f9
+    {
Bernhard M. Wiedemann 018f1b
+      fprintf(stderr, "rpmtsCreate failed\n");
Bernhard M. Wiedemann 1250f9
+      exit(1);
Bernhard M. Wiedemann 1250f9
+    }
Bernhard M. Wiedemann 018f1b
+  if (rpmtsOpenDB(ts, O_RDONLY))
Bernhard M. Wiedemann 1250f9
+    {
Bernhard M. Wiedemann 018f1b
+      perror("rpmtsOpenDB");
Bernhard M. Wiedemann 1250f9
+      exit(1);
Bernhard M. Wiedemann 1250f9
+    }
Bernhard M. Wiedemann 018f1b
+  if (argc <= 1)
Bernhard M. Wiedemann 1250f9
+    {
Bernhard M. Wiedemann 018f1b
+      rpmdbIndexIterator ii;
Bernhard M. Wiedemann 018f1b
+      ii = rpmdbIndexIteratorInit(rpmtsGetRdb(ts), RPMDBI_NAME);
Bernhard M. Wiedemann 018f1b
+      if (ii)
Bernhard M. Wiedemann 1250f9
+	{
Bernhard M. Wiedemann 018f1b
+	  const void *key = 0;
Bernhard M. Wiedemann 018f1b
+          size_t keylen = 0;
Bernhard M. Wiedemann 018f1b
+	  while ((rpmdbIndexIteratorNext(ii, &key, &keylen)) == 0)
Bernhard M. Wiedemann 018f1b
+	    printf("%*.*s\n", (int)keylen, (int)keylen, (char *)key);
Bernhard M. Wiedemann 1250f9
+	}
Bernhard M. Wiedemann 018f1b
+      rpmdbIndexIteratorFree(ii);
Bernhard M. Wiedemann 1250f9
+    }
Bernhard M. Wiedemann 1250f9
+  else
Bernhard M. Wiedemann 1250f9
+    {
Bernhard M. Wiedemann 1250f9
+      argc--;
Bernhard M. Wiedemann 1250f9
+      while (argc--)
Bernhard M. Wiedemann 1250f9
+	{
Bernhard M. Wiedemann 018f1b
+          rpmdbMatchIterator mi;
Bernhard M. Wiedemann 1250f9
+	  argv++;
Bernhard M. Wiedemann 018f1b
+          mi = rpmdbInitIterator(rpmtsGetRdb(ts), RPMDBI_NAME, (void *)*argv, strlen(*argv));
Bernhard M. Wiedemann 018f1b
+	  if (mi && rpmdbGetIteratorCount(mi))
Bernhard M. Wiedemann 1250f9
+	    printf("%s\n", *argv);
Bernhard M. Wiedemann 018f1b
+          else
Bernhard M. Wiedemann 1250f9
+	    ret = 1;
Bernhard M. Wiedemann 018f1b
+	  rpmdbFreeIterator(mi);
Bernhard M. Wiedemann 018f1b
+        }
Bernhard M. Wiedemann 1250f9
+    }
Bernhard M. Wiedemann 018f1b
+  rpmtsFree(ts);
Bernhard M. Wiedemann 1250f9
+  return ret;
Bernhard M. Wiedemann 1250f9
+}