2006-12-19 00:17:44 +01:00
|
|
|
Provide rpmqpack, a fast way to list all installed packages are
|
|
|
|
check if some package is installed. This is a hack.
|
|
|
|
|
2008-09-12 20:37:28 +02:00
|
|
|
Index: Makefile.am
|
|
|
|
===================================================================
|
|
|
|
--- Makefile.am.orig
|
2006-12-19 00:17:44 +01:00
|
|
|
+++ Makefile.am
|
2009-08-28 15:54:03 +02:00
|
|
|
@@ -139,6 +139,10 @@ check_PROGRAMS += rpmsort
|
|
|
|
rpmsort_SOURCES = tools/rpmsort.c
|
|
|
|
rpmsort_LDADD = lib/librpm.la
|
2006-12-19 00:17:44 +01:00
|
|
|
|
2009-08-28 15:54:03 +02:00
|
|
|
+bin_PROGRAMS += rpmqpack
|
|
|
|
+rpmqpack_SOURCES = rpmqpack.c
|
|
|
|
+rpmqpack_LDADD = lib/librpm.la
|
2006-12-19 00:17:44 +01:00
|
|
|
+
|
2009-08-28 15:54:03 +02:00
|
|
|
rpmconfig_DATA = rpmrc
|
|
|
|
rpmrc: $(top_srcdir)/rpmrc.in
|
|
|
|
@$(SED) \
|
2008-09-12 20:37:28 +02:00
|
|
|
Index: doc/Makefile.am
|
|
|
|
===================================================================
|
|
|
|
--- doc/Makefile.am.orig
|
2006-12-19 00:17:44 +01:00
|
|
|
+++ doc/Makefile.am
|
2009-08-28 15:54:03 +02:00
|
|
|
@@ -7,7 +7,7 @@ man_man1_DATA = gendiff.1
|
|
|
|
EXTRA_DIST += $(man_man1_DATA)
|
2006-12-19 00:17:44 +01:00
|
|
|
|
2009-08-28 15:54:03 +02:00
|
|
|
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)
|
2006-12-19 00:17:44 +01:00
|
|
|
|
2009-08-28 15:54:03 +02:00
|
|
|
man_fr_man8dir = $(mandir)/fr/man8
|
2008-09-12 20:37:28 +02:00
|
|
|
Index: doc/rpmqpack.8
|
|
|
|
===================================================================
|
|
|
|
--- /dev/null
|
2006-12-19 00:17:44 +01:00
|
|
|
+++ 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 <mls@suse.de>
|
2008-09-12 20:37:28 +02:00
|
|
|
Index: rpmqpack.c
|
|
|
|
===================================================================
|
|
|
|
--- /dev/null
|
2006-12-19 00:17:44 +01:00
|
|
|
+++ rpmqpack.c
|
|
|
|
@@ -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_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;
|
|
|
|
+}
|