1 diff --git a/configure.ac b/configure.ac
2 index 192a838..4ddd127 100644
5 @@ -200,12 +200,11 @@ AC_CHECK_LIB(bz2, BZ2_decompress,
6 AM_CONDITIONAL(HAVE_BZ2, false))],
7 AM_CONDITIONAL(HAVE_BZ2, false))
9 -AC_CHECK_LIB(rpm, rpmReadPackageFile,
10 - [AC_CHECK_HEADERS([rpm/rpmlib.h],
11 - AM_CONDITIONAL(HAVE_LIBRPM, true)
12 - AC_DEFINE(HAVE_LIBRPM,1,[Have librpm]),
13 - AM_CONDITIONAL(HAVE_LIBRPM, false))],
14 - AM_CONDITIONAL(HAVE_LIBRPM, false))
15 +PKG_CHECK_MODULES(RPM, rpm,
16 + AM_CONDITIONAL(HAVE_LIBRPM, true)
17 + AC_DEFINE([HAVE_LIBRPM],[1], "RPM..."),
18 + AM_CONDITIONAL(HAVE_LIBRPM, false)
21 AC_CHECK_LIB(mpeg2, mpeg2_init,
22 [AC_CHECK_HEADERS([mpeg2dec/mpeg2.h],
23 --- libextractor-1.0.1/src/plugins/Makefile.am.orig 2012-12-01 16:30:21.501145332 +0100
24 +++ libextractor-1.0.1/src/plugins/Makefile.am 2012-12-01 16:50:19.671120357 +0100
27 -I$(top_srcdir)/src/include \
28 - -I$(top_srcdir)/src/common
29 + -I$(top_srcdir)/src/common \
33 # install plugins under:
34 --- libextractor-1.3/src/plugins/rpm_extractor.c.orig 2013-11-28 22:16:45.000000000 +0100
35 +++ libextractor-1.3/src/plugins/rpm_extractor.c 2013-12-26 20:29:36.083607762 +0100
38 #include "extractor.h"
40 -#include <rpm/rpmlib.h>
41 -#include <rpm/rpmts.h>
42 -#include <rpm/rpmlog.h>
48 #include <pthread_np.h>
50 @@ -128,6 +129,7 @@ pipe_feeder (void * args)
51 * LOG callback called by librpm. Does nothing, we
52 * just need this to override the default behavior.
54 +#ifdef RPMLOG_DEFAULT
56 discard_log_callback (rpmlogRec rec,
58 @@ -135,6 +137,9 @@ discard_log_callback (rpmlogRec rec,
63 +static void discard_log_callback() { }
68 @@ -240,6 +245,12 @@ static struct Matches tests[] = {
73 +static int headerNext(HeaderIterator hi, HE_t he, /*@unused@*/ unsigned int flags)
75 + return headerNextIterator(hi, &he->tag, &he->t, &he->p.ptr, &he->c);
80 * Main entry method for the 'application/x-rpm' extraction plugin.
81 @@ -255,7 +266,7 @@ EXTRACTOR_rpm_extract_method (struct EXT
90 @@ -286,7 +297,11 @@ EXTRACTOR_rpm_extract_method (struct EXT
94 +#ifdef RPMLOG_DEFAULT
95 rpmlogSetCallback (&discard_log_callback, NULL);
97 + rpmlogSetCallback (&discard_log_callback);
99 fdi = fdDup (parg.pi[0]);
101 rc = rpmReadPackageFile (ts, fdi, "GNU libextractor", &hdr);
102 @@ -314,19 +329,38 @@ EXTRACTOR_rpm_extract_method (struct EXT
105 pthread_mutex_unlock (&parg.lock);
107 + hi = headerInit (hdr);
109 hi = headerInitIterator (hdr);
111 - while (1 == headerNext (hi, p))
113 + p = (HE_t)memset(alloca(sizeof(*p)), 0, sizeof(*p));
114 + while (1 == headerNext (hi, p, 0))
115 for (i = 0; 0 != tests[i].rtype; i++)
117 if (tests[i].rtype != p->tag)
122 + case RPM_STRING_TYPE:
124 + pthread_mutex_lock (&parg.lock);
125 + if (0 != ec->proc (ec->cls,
128 + EXTRACTOR_METAFORMAT_UTF8,
131 + strlen (p->p.str) +1)) {
132 + pthread_mutex_unlock (&parg.lock);
135 + pthread_mutex_unlock (&parg.lock);
138 case RPM_STRING_ARRAY_TYPE:
139 case RPM_I18NSTRING_TYPE:
140 - case RPM_STRING_TYPE:
141 - while (NULL != (str = rpmtdNextString (p)))
142 + for(p->ix = 0; p->ix < p->c; p->ix++)
144 pthread_mutex_lock (&parg.lock);
145 if (0 != ec->proc (ec->cls,
146 @@ -334,8 +368,8 @@ EXTRACTOR_rpm_extract_method (struct EXT
148 EXTRACTOR_METAFORMAT_UTF8,
153 + strlen (p->p.argv[p->ix]) + 1))
156 pthread_mutex_unlock (&parg.lock);
157 @@ -344,12 +378,12 @@ EXTRACTOR_rpm_extract_method (struct EXT
158 pthread_mutex_unlock (&parg.lock);
161 - case RPM_INT32_TYPE:
162 + case RPM_UINT32_TYPE:
164 if (p->tag == RPMTAG_BUILDTIME)
167 - uint32_t *v = rpmtdNextUint32 (p);
168 + uint32_t *v = p->p.ui32p;
169 time_t tp = (time_t) *v;
172 @@ -371,7 +405,7 @@ EXTRACTOR_rpm_extract_method (struct EXT
176 - uint32_t *s = rpmtdNextUint32 (p);
177 + uint32_t *s = p->p.ui32p;
181 @@ -398,7 +432,6 @@ EXTRACTOR_rpm_extract_method (struct EXT
186 headerFreeIterator (hi);