92 lines
2.3 KiB
Diff
92 lines
2.3 KiB
Diff
From 3a967a746008001fb9b7ade5451d19a1f1956601 Mon Sep 17 00:00:00 2001
|
|
From: Pino Toscano <ptoscano@redhat.com>
|
|
Date: Thu, 18 Sep 2014 16:37:48 +0200
|
|
Subject: [PATCH] rpm: reuse the rpmtd when possible
|
|
|
|
Use a single rpmtd object per operation, making sure it is properly
|
|
cleaned when needed. This slightly reduces the number of malloc/free's.
|
|
---
|
|
src/librpm-c.c | 12 ++++++------
|
|
1 file changed, 6 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/src/librpm-c.c b/src/librpm-c.c
|
|
index e5079b1..1ae3bad 100644
|
|
--- a/src/librpm-c.c
|
|
+++ b/src/librpm-c.c
|
|
@@ -185,6 +185,7 @@ supermin_rpm_installed (value rpmv, value pkgv)
|
|
rpmdbMatchIterator iter;
|
|
int count, i;
|
|
Header h;
|
|
+ rpmtd td;
|
|
|
|
data = Librpm_val (rpmv);
|
|
if (data.ts == NULL)
|
|
@@ -200,16 +201,15 @@ supermin_rpm_installed (value rpmv, value pkgv)
|
|
|
|
rv = caml_alloc (count, 0);
|
|
i = 0;
|
|
+ td = rpmtdNew ();
|
|
|
|
while ((h = rpmdbNextIterator (iter)) != NULL) {
|
|
HeaderIterator hi;
|
|
- rpmtd td;
|
|
uint32_t *val;
|
|
bool stored_vals[5] = { false };
|
|
|
|
v = caml_alloc (5, 0);
|
|
hi = headerInitIterator (h);
|
|
- td = rpmtdNew ();
|
|
while (headerNext (hi, td) == 1) {
|
|
switch (rpmtdTag (td)) {
|
|
case RPMTAG_NAME:
|
|
@@ -251,11 +251,11 @@ supermin_rpm_installed (value rpmv, value pkgv)
|
|
Store_field (v, 4, caml_copy_string ("unknown"));
|
|
Store_field (rv, i, v);
|
|
|
|
- rpmtdFree (td);
|
|
headerFreeIterator (hi);
|
|
++i;
|
|
}
|
|
|
|
+ rpmtdFree (td);
|
|
rpmdbFreeIterator (iter);
|
|
|
|
CAMLreturn (rv);
|
|
@@ -334,6 +334,7 @@ supermin_rpm_pkg_whatprovides (value rpmv, value pkgv)
|
|
rpmdbMatchIterator iter;
|
|
int count, i;
|
|
Header h;
|
|
+ rpmtd td;
|
|
|
|
data = Librpm_val (rpmv);
|
|
if (data.ts == NULL)
|
|
@@ -349,12 +350,11 @@ supermin_rpm_pkg_whatprovides (value rpmv, value pkgv)
|
|
|
|
rv = caml_alloc (count, 0);
|
|
i = 0;
|
|
+ td = rpmtdNew ();
|
|
|
|
while ((h = rpmdbNextIterator (iter)) != NULL) {
|
|
- rpmtd td;
|
|
int ret;
|
|
|
|
- td = rpmtdNew ();
|
|
ret = headerGet (h, RPMTAG_NAME, td, HEADERGET_MINMEM);
|
|
if (ret != 1)
|
|
caml_failwith ("rpm_pkg_whatprovides: headerGet failed");
|
|
@@ -362,10 +362,10 @@ supermin_rpm_pkg_whatprovides (value rpmv, value pkgv)
|
|
Store_field (rv, i, caml_copy_string (rpmtdGetString (td)));
|
|
|
|
rpmtdFreeData (td);
|
|
- rpmtdFree (td);
|
|
++i;
|
|
}
|
|
|
|
+ rpmtdFree (td);
|
|
rpmdbFreeIterator (iter);
|
|
|
|
CAMLreturn (rv);
|
|
--
|
|
1.9.3
|
|
|