]> git.pld-linux.org Git - packages/libextractor.git/blame - libextractor-rpm5.patch
- enabled smf support
[packages/libextractor.git] / libextractor-rpm5.patch
CommitLineData
a78ce0f6
JR
1diff --git a/configure.ac b/configure.ac
2index 192a838..4ddd127 100644
3--- a/configure.ac
4+++ b/configure.ac
5@@ -200,12 +200,11 @@ AC_CHECK_LIB(bz2, BZ2_decompress,
6 AM_CONDITIONAL(HAVE_BZ2, false))],
7 AM_CONDITIONAL(HAVE_BZ2, false))
8
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)
19+ )
20
21 AC_CHECK_LIB(mpeg2, mpeg2_init,
22 [AC_CHECK_HEADERS([mpeg2dec/mpeg2.h],
ae0eb0ec
JB
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
25@@ -1,6 +1,7 @@
26 INCLUDES = \
27 -I$(top_srcdir)/src/include \
28- -I$(top_srcdir)/src/common
29+ -I$(top_srcdir)/src/common \
30+ $(RPM_CFLAGS)
31
a78ce0f6
JR
32
33 # install plugins under:
ae0eb0ec
JB
34--- libextractor-1.0.1/src/plugins/rpm_extractor.c.orig 2012-08-06 13:02:13.000000000 +0200
35+++ libextractor-1.0.1/src/plugins/rpm_extractor.c 2012-12-01 21:35:01.967430974 +0100
36@@ -25,9 +25,10 @@
a78ce0f6
JR
37 #include "platform.h"
38 #include "extractor.h"
39 #include <stdint.h>
40-#include <rpm/rpmlib.h>
41-#include <rpm/rpmts.h>
42-#include <rpm/rpmlog.h>
43+#include <rpmcli.h>
a78ce0f6 44+#include <rpmio.h>
a78ce0f6
JR
45+#include <rpmts.h>
46+#include <rpmlog.h>
47 #include <pthread.h>
48 #include <sys/types.h>
49 #include <signal.h>
ae0eb0ec
JB
50@@ -124,6 +125,7 @@ pipe_feeder (void * args)
51 * LOG callback called by librpm. Does nothing, we
52 * just need this to override the default behavior.
53 */
54+#ifdef RPMLOG_DEFAULT
55 static int
56 discard_log_callback (rpmlogRec rec,
57 void *ctx)
58@@ -131,7 +133,9 @@ discard_log_callback (rpmlogRec rec,
59 /* do nothing! */
60 return 0;
61 }
62-
63+#else
64+static void discard_log_callback() { }
65+#endif
66
67 /**
68 * Mapping from RPM tags to LE types.
69@@ -236,6 +240,12 @@ static struct Matches tests[] = {
70 {0, 0}
71 };
72
73+#ifndef H_RPMTAG
74+static int headerNext(HeaderIterator hi, HE_t he, /*@unused@*/ unsigned int flags)
75+{
76+ return headerNextIterator(hi, &he->tag, &he->t, &he->p.ptr, &he->c);
77+}
78+#endif
79
80 /**
81 * Main entry method for the 'application/x-rpm' extraction plugin.
82@@ -251,7 +261,7 @@ EXTRACTOR_rpm_extract_method (struct EXT
a78ce0f6
JR
83 const char *str;
84 Header hdr;
85 HeaderIterator hi;
86- rpmtd p;
87+ HE_t p;
88 int i;
89 FD_t fdi;
90 rpmRC rc;
ae0eb0ec
JB
91@@ -282,7 +292,11 @@ EXTRACTOR_rpm_extract_method (struct EXT
92 CLOSE (parg.pi[1]);
93 return;
94 }
95+#ifdef RPMLOG_DEFAULT
96 rpmlogSetCallback (&discard_log_callback, NULL);
97+#else
98+ rpmlogSetCallback (&discard_log_callback);
99+#endif
100 fdi = fdDup (parg.pi[0]);
101 ts = rpmtsCreate();
102 rc = rpmReadPackageFile (ts, fdi, "GNU libextractor", &hdr);
103@@ -310,19 +324,38 @@ EXTRACTOR_rpm_extract_method (struct EXT
104 goto END;
105 }
106 pthread_mutex_unlock (&parg.lock);
107+#ifdef H_RPMTAG
108+ hi = headerInit (hdr);
109+#else
110 hi = headerInitIterator (hdr);
a78ce0f6
JR
111- p = rpmtdNew ();
112- while (1 == headerNext (hi, p))
ae0eb0ec 113+#endif
a78ce0f6
JR
114+ p = (HE_t)memset(alloca(sizeof(*p)), 0, sizeof(*p));
115+ while (1 == headerNext (hi, p, 0))
ae0eb0ec
JB
116 for (i = 0; 0 != tests[i].rtype; i++)
117 {
118 if (tests[i].rtype != p->tag)
119 continue;
120- switch (p->type)
121+ switch (p->t)
122 {
123+ case RPM_STRING_TYPE:
124+ {
125+ pthread_mutex_lock (&parg.lock);
126+ if (0 != ec->proc (ec->cls,
a78ce0f6
JR
127+ "rpm",
128+ tests[i].type,
129+ EXTRACTOR_METAFORMAT_UTF8,
130+ "text/plain",
131+ p->p.str,
ae0eb0ec
JB
132+ strlen (p->p.str) +1)) {
133+ pthread_mutex_unlock (&parg.lock);
134+ return;
135+ }
136+ pthread_mutex_unlock (&parg.lock);
137+ }
138+ break;
139 case RPM_STRING_ARRAY_TYPE:
140 case RPM_I18NSTRING_TYPE:
141- case RPM_STRING_TYPE:
142- while (NULL != (str = rpmtdNextString (p)))
143+ for(p->ix = 0; p->ix < p->c; p->ix++)
144 {
145 pthread_mutex_lock (&parg.lock);
146 if (0 != ec->proc (ec->cls,
147@@ -330,8 +363,8 @@ EXTRACTOR_rpm_extract_method (struct EXT
148 tests[i].type,
149 EXTRACTOR_METAFORMAT_UTF8,
150 "text/plain",
151- str,
152- strlen (str) + 1))
153+ p->p.argv[p->ix],
154+ strlen (p->p.argv[p->ix]) + 1))
155
156 {
157 pthread_mutex_unlock (&parg.lock);
158@@ -340,12 +373,12 @@ EXTRACTOR_rpm_extract_method (struct EXT
159 pthread_mutex_unlock (&parg.lock);
160 }
161 break;
162- case RPM_INT32_TYPE:
163+ case RPM_UINT32_TYPE:
164 {
165 if (p->tag == RPMTAG_BUILDTIME)
166 {
167 char tmp[30];
168- uint32_t *v = rpmtdNextUint32 (p);
169+ uint32_t *v = p->p.ui32p;
170 time_t tp = (time_t) *v;
171
172 ctime_r (&tp, tmp);
173@@ -367,7 +400,7 @@ EXTRACTOR_rpm_extract_method (struct EXT
174 else
175 {
176 char tmp[14];
177- uint32_t *s = rpmtdNextUint32 (p);
178+ uint32_t *s = p->p.ui32p;
179
180 snprintf (tmp,
181 sizeof (tmp),
182@@ -394,7 +427,6 @@ EXTRACTOR_rpm_extract_method (struct EXT
183 }
184 }
185 CLEANUP:
186- rpmtdFree (p);
187 headerFreeIterator (hi);
188
189 END:
This page took 0.097843 seconds and 4 git commands to generate.