From d0eaa7c0485f670371fc6a99bf27021fdaa467e4 Mon Sep 17 00:00:00 2001 From: Panu Matilainen Date: Fri, 20 Nov 2009 10:32:47 +0200 Subject: [PATCH] Add RPMTAG_EPOCHNUM tag extension - return RPMTAG_EPOCH but convert non-existent epoch to 0, as rpm internals treat it --- lib/rpmtag.h | 1 + lib/tagexts.c | 16 ++++++++++++++++ tests/rpmgeneral.at | 1 + 3 files changed, 18 insertions(+) diff --git a/lib/rpmtag.h b/lib/rpmtag.h index 58be8cf..eb3b1ad 100644 --- a/lib/rpmtag.h +++ b/lib/rpmtag.h @@ -291,6 +291,7 @@ typedef enum rpmTag_e { RPMTAG_NEVRA = 5016, /* s extension */ RPMTAG_HEADERCOLOR = 5017, /* i extension */ RPMTAG_VERBOSE = 5018, /* i extension */ + RPMTAG_EPOCHNUM = 5019, /* i extension */ RPMTAG_FIRSTFREE_TAG /*!< internal */ } rpmTag; diff --git a/lib/tagexts.c b/lib/tagexts.c index eac9aca..f438d19 100644 --- a/lib/tagexts.c +++ b/lib/tagexts.c @@ -744,6 +744,21 @@ static int verboseTag(Header h, rpmtd td, headerGetFlags hgflags) } } +static int epochnumTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + /* For consistency, always return malloced data */ + if (!headerGet(h, RPMTAG_EPOCH, td, HEADERGET_ALLOC)) { + uint32_t *e = malloc(sizeof(*e)); + *e = 0; + td->data = e; + td->type = RPM_INT32_TYPE; + td->count = 1; + td->flags = RPMTD_ALLOCED; + } + td->tag = RPMTAG_EPOCHNUM; + return 1; +} + void *rpmHeaderTagFunc(rpmTag tag) { const struct headerTagFunc_s * ext; @@ -784,6 +799,7 @@ static const struct headerTagFunc_s rpmHeaderTagExtensions[] = { { RPMTAG_NEVRA, nevraTag }, { RPMTAG_HEADERCOLOR, headercolorTag }, { RPMTAG_VERBOSE, verboseTag }, + { RPMTAG_EPOCHNUM, epochnumTag }, { 0, NULL } }; diff --git a/tests/rpmgeneral.at b/tests/rpmgeneral.at index de5c3f5..98f86d5 100644 --- a/tests/rpmgeneral.at +++ b/tests/rpmgeneral.at @@ -97,6 +97,7 @@ DISTURL DSAHEADER E EPOCH +EPOCHNUM EVR EXCLUDEARCH EXCLUDEOS -- 2.7.4