[Rpm-maint] [PATCH v7 04/11] Subroutine for dumping immutable region of header
Fionnuala Gunter
fionnuala.gunter at gmail.com
Mon Jul 20 22:11:20 UTC 2015
From: "fin at linux.vnet.ibm.com" <fin at linux.vnet.ibm.com>
This patch creates a subroutine for dumping the immutable region of
a header. It copies the header sections into a new header that can
be altered.
Changelog:
- deallocate old hdrp
---
sign/rpmgensig.c | 47 ++++++++++++++++++++++++++++-------------------
1 file changed, 28 insertions(+), 19 deletions(-)
diff --git a/sign/rpmgensig.c b/sign/rpmgensig.c
index 09a5858..b0bed44 100644
--- a/sign/rpmgensig.c
+++ b/sign/rpmgensig.c
@@ -471,6 +471,33 @@ static int replaceSignature(Header sigh, sigTarget sigt1, sigTarget sigt2)
return rc;
}
+static void unloadImmutableRegion(Header *hdrp, rpmTagVal tag, rpmtd utd)
+{
+ struct rpmtd_s copytd;
+ Header nh;
+ Header oh;
+ HeaderIterator hi;
+
+ if (headerGet(*hdrp, tag, utd, HEADERGET_DEFAULT)) {
+ nh = headerNew();
+ oh = headerCopyLoad(utd->data);
+ hi = headerInitIterator(oh);
+
+ while (headerNext(hi, ©td)) {
+ if (copytd.data)
+ headerPut(nh, ©td, HEADERPUT_DEFAULT);
+ rpmtdFreeData(©td);
+ }
+
+ headerFreeIterator(hi);
+ headerFree(oh);
+ rpmtdFreeData(utd);
+ headerFree(*hdrp);
+ *hdrp = headerLink(nh);
+ headerFree(nh);
+ }
+}
+
/** \ingroup rpmcli
* Create/modify elements in signature header.
* @param rpm path to package
@@ -528,25 +555,7 @@ static int rpmSign(const char *rpm, int deleting)
goto exit;
}
- /* Dump the immutable region (if present). */
- if (headerGet(sigh, RPMTAG_HEADERSIGNATURES, &utd, HEADERGET_DEFAULT)) {
- struct rpmtd_s copytd;
- Header nh = headerNew();
- Header oh = headerCopyLoad(utd.data);
- HeaderIterator hi = headerInitIterator(oh);
- while (headerNext(hi, ©td)) {
- if (copytd.data)
- headerPut(nh, ©td, HEADERPUT_DEFAULT);
- rpmtdFreeData(©td);
- }
- headerFreeIterator(hi);
- headerFree(oh);
- rpmtdFreeData(&utd);
-
- headerFree(sigh);
- sigh = headerLink(nh);
- headerFree(nh);
- }
+ unloadImmutableRegion(&sigh, RPMTAG_HEADERSIGNATURES, &utd);
origSigSize = headerSizeof(sigh, HEADER_MAGIC_YES);
if (deleting) { /* Nuke all the signature tags. */
--
2.4.3
More information about the Rpm-maint
mailing list