Cut some extra twists from the query maze
authorPanu Matilainen <pmatilai@redhat.com>
Tue, 7 Sep 2010 19:22:25 +0000 (22:22 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Wed, 8 Sep 2010 04:50:31 +0000 (07:50 +0300)
- RPMQV_ALL and RPMQV_RPM do nothing but call rpmcli/giShowMatches()
  in rpmQueryVerify(), call them directly from rpmcliArgIter() instead
- Make iterator allocation + deallocation symmetric: both
  rpmcliArgIter() and rpmQueryVerify() now free what they alloced,
  rpmfooShowMatches() is a weird place for freeing

lib/query.c

index 07f4633..75c5940 100644 (file)
@@ -294,7 +294,6 @@ static int rpmcliShowMatches(QVA_t qva, rpmts ts)
        if ((rc = qva->qva_showPackage(qva, ts, h)) != 0)
            ec = rc;
     }
-    qva->qva_mi = rpmdbFreeIterator(qva->qva_mi);
     return ec;
 }
 
@@ -311,19 +310,10 @@ static int rpmQueryVerify(QVA_t qva, rpmts ts, const char * arg)
        return 1;
 
     switch (qva->qva_source) {
-    case RPMQV_RPM:
-       res = rpmgiShowMatches(qva, ts);
-       break;
-
-    case RPMQV_ALL:
-       res = rpmcliShowMatches(qva, ts);
-       break;
-
     case RPMQV_SPECFILE:
        res = ((qva->qva_specQuery != NULL)
                ? qva->qva_specQuery(ts, qva, arg) : 1);
        break;
-
     case RPMQV_GROUP:
        qva->qva_mi = rpmtsInitIterator(ts, RPMTAG_GROUP, arg, 0);
        if (qva->qva_mi == NULL) {
@@ -523,8 +513,12 @@ static int rpmQueryVerify(QVA_t qva, rpmts ts, const char * arg)
        }
        break;
     }
-    
+    default:
+       res = -1;
+       break;
     }
+
+    qva->qva_mi = rpmdbFreeIterator(qva->qva_mi);
    
     return res;
 }
@@ -575,14 +569,14 @@ int rpmcliArgIter(rpmts ts, QVA_t qva, ARGV_const_t argv)
        qva->qva_mi = rpmtsInitIterator(ts, RPMDBI_PACKAGES, NULL, 0);
        if (applyFilters(qva->qva_mi, argv) != RPMRC_OK) {
            ec = 1;
-           qva->qva_mi = rpmdbFreeIterator(qva->qva_mi);
        } else {
-           ec += rpmQueryVerify(qva, ts, NULL);
+           ec = rpmcliShowMatches(qva, ts);
        }
+       qva->qva_mi = rpmdbFreeIterator(qva->qva_mi);
        break;
     case RPMQV_RPM:
        qva->qva_gi = rpmgiNew(ts, giFlags, argv);
-       ec = rpmQueryVerify(qva, ts, NULL);
+       ec = rpmgiShowMatches(qva, ts);
        qva->qva_gi = rpmgiFree(qva->qva_gi);
        break;
     default: