From e232344a496798e4ca143630a127d8ead086eb7c Mon Sep 17 00:00:00 2001 From: Panu Matilainen Date: Thu, 4 Dec 2008 21:55:52 +0200 Subject: [PATCH] Pay more attention to tag extension return codes - behave like headerGet() does and return failure if there's no data to return - some cases where we used to return nothing previously now return (none) in query, but the former behavior was inconsistent between tags - not sure if (none) is really wanted for a return of no value always, but at least it's consistent now --- lib/tagexts.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/lib/tagexts.c b/lib/tagexts.c index 8a60d55..501d8ac 100644 --- a/lib/tagexts.c +++ b/lib/tagexts.c @@ -105,6 +105,7 @@ static int filedepTag(Header h, rpmTag tagN, rpmtd td) int numfiles; char deptype = 'R'; int fileix; + int rc = 0; numfiles = rpmfiFC(fi); if (numfiles <= 0) { @@ -146,12 +147,13 @@ static int filedepTag(Header h, rpmTag tagN, rpmtd td) td->data = fdeps; td->count = numfiles; td->flags = RPMTD_ALLOCED | RPMTD_PTR_ALLOCED; + td->type = RPM_STRING_ARRAY_TYPE; + rc = 1; exit: - td->type = RPM_STRING_ARRAY_TYPE; fi = rpmfiFree(fi); ds = rpmdsFree(ds); - return 1; + return rc; } /** @@ -374,11 +376,13 @@ static int triggertypeTag(Header h, rpmtd td) */ static int filenamesTag(Header h, rpmtd td) { - td->type = RPM_STRING_ARRAY_TYPE; rpmfiBuildFNames(h, RPMTAG_BASENAMES, (const char ***) &(td->data), &(td->count)); - td->flags = RPMTD_ALLOCED; - return 1; + if (td->data) { + td->type = RPM_STRING_ARRAY_TYPE; + td->flags = RPMTD_ALLOCED; + } + return (td->data != NULL); } /** @@ -389,11 +393,13 @@ static int filenamesTag(Header h, rpmtd td) */ static int origfilenamesTag(Header h, rpmtd td) { - td->type = RPM_STRING_ARRAY_TYPE; rpmfiBuildFNames(h, RPMTAG_ORIGBASENAMES, (const char ***) &(td->data), &(td->count)); - td->flags = RPMTD_ALLOCED; - return 1; + if (td->data) { + td->type = RPM_STRING_ARRAY_TYPE; + td->flags = RPMTD_ALLOCED; + } + return (td->data != NULL); } /** * Retrieve file classes. @@ -406,6 +412,7 @@ static int fileclassTag(Header h, rpmtd td) rpmfi fi = rpmfiNew(NULL, h, RPMTAG_BASENAMES, RPMFI_NOHEADER); char **fclasses; int ix, numfiles; + int rc = 0; numfiles = rpmfiFC(fi); if (numfiles <= 0) { @@ -422,11 +429,12 @@ static int fileclassTag(Header h, rpmtd td) td->data = fclasses; td->count = numfiles; td->flags = RPMTD_ALLOCED | RPMTD_PTR_ALLOCED; + td->type = RPM_STRING_ARRAY_TYPE; + rc = 1; exit: - td->type = RPM_STRING_ARRAY_TYPE; fi = rpmfiFree(fi); - return 1; + return rc; } /** -- 2.7.4