Pay more attention to tag extension return codes
authorPanu Matilainen <pmatilai@redhat.com>
Thu, 4 Dec 2008 19:55:52 +0000 (21:55 +0200)
committerPanu Matilainen <pmatilai@redhat.com>
Thu, 4 Dec 2008 19:55:52 +0000 (21:55 +0200)
- 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

index 8a60d55..501d8ac 100644 (file)
@@ -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
 }
 
 /**