#include "debug.h"
+static int NEVRA(Header h, const char **np,
+ uint32_t **ep, const char **vp, const char **rp,
+ const char **ap)
+{
+ if (np) *np = headerGetString(h, RPMTAG_NAME);
+ if (vp) *vp = headerGetString(h, RPMTAG_VERSION);
+ if (rp) *rp = headerGetString(h, RPMTAG_RELEASE);
+ if (ap) *ap = headerGetString(h, RPMTAG_ARCH);
+ if (ep) {
+ struct rpmtd_s td;
+ headerGet(h, RPMTAG_EPOCH, &td, HEADERGET_DEFAULT);
+ *ep = rpmtdGetUint32(&td);
+ }
+ return 0;
+}
+
int headerNVR(Header h, const char **np, const char **vp, const char **rp)
{
- return headerNEVRA(h, np, NULL, vp, rp, NULL);
+ return NEVRA(h, np, NULL, vp, rp, NULL);
}
int headerNEVRA(Header h, const char **np,
uint32_t **ep, const char **vp, const char **rp,
const char **ap)
{
- struct rpmtd_s td;
+ return NEVRA(h, np, ep, vp, rp, ap);
+}
- if (np) {
- headerGet(h, RPMTAG_NAME, &td, HEADERGET_DEFAULT);
- *np = rpmtdGetString(&td);
- }
- if (vp) {
- headerGet(h, RPMTAG_VERSION, &td, HEADERGET_DEFAULT);
- *vp = rpmtdGetString(&td);
- }
- if (rp) {
- headerGet(h, RPMTAG_RELEASE, &td, HEADERGET_DEFAULT);
- *rp = rpmtdGetString(&td);
- }
- if (ap) {
- headerGet(h, RPMTAG_ARCH, &td, HEADERGET_DEFAULT);
- *ap = rpmtdGetString(&td);
- }
- if (ep) {
- headerGet(h, RPMTAG_EPOCH, &td, HEADERGET_DEFAULT);
- *ep = rpmtdGetUint32(&td);
- }
- return 0;
+static char *getNEVRA(Header h, rpmTag tag, const char **np)
+{
+ if (np) *np = headerGetString(h, RPMTAG_NAME);
+ return headerGetAsString(h, tag);
}
char * headerGetNEVR(Header h, const char ** np)
{
- const char * n;
- char * evr, *nevr = NULL;
-
- evr = headerGetEVR(h, &n);
- rasprintf(&nevr, "%s-%s", n, evr);
- free(evr);
- if (np)
- *np = n;
- return nevr;
+ return getNEVRA(h, RPMTAG_NEVR, np);
}
char * headerGetNEVRA(Header h, const char ** np)
{
- const char *n = NULL, *a = NULL;
- char *nevr, *nevra = NULL;
- struct rpmtd_s arch;
-
- nevr = headerGetNEVR(h, &n);
- if (headerGet(h, RPMTAG_ARCH, &arch, HEADERGET_DEFAULT)) {
- a = rpmtdGetString(&arch);
- }
-
- /* XXX gpg-pubkey packages have no arch, urgh... */
- if (a) {
- const char *arch = headerIsSource(h) ? "src" : a;
- rasprintf(&nevra, "%s.%s", nevr, arch);
- free(nevr);
- } else {
- nevra = nevr;
- }
-
- if (np)
- *np = n;
- return nevra;
+ return getNEVRA(h, RPMTAG_NEVRA, np);
}
char * headerGetEVR(Header h, const char ** np)
{
- const char *n, *v, *r;
- char *evr = NULL;
- uint32_t *e;
-
- (void) headerNEVRA(h, &n, &e, &v, &r, NULL);
- if (e) {
- rasprintf(&evr, "%d:%s-%s", *e, v, r);
- } else {
- rasprintf(&evr, "%s-%s", v, r);
- }
- if (np)
- *np = n;
- return evr;
+ return getNEVRA(h, RPMTAG_EVR, np);
}
rpm_color_t headerGetColor(Header h)