Arg iteration for --query and --verify, everything but RPMQV_ALL.

CVS patchset: 7505
CVS date: 2004/10/24 20:35:41
This commit is contained in:
jbj 2004-10-24 20:35:41 +00:00
parent 3691d13f04
commit 595a207f27
3 changed files with 26 additions and 23 deletions

View File

@ -784,12 +784,14 @@ restart:
int rpmcliArgIter(rpmts ts, QVA_t qva, ARGV_t argv)
{
const char * arg;
int gitag = RPMDBI_ARGLIST;
int gikey = NULL;
int gikeylen = 0;
int ftsOpts = 0;
rpmgiFlags giflags = RPMGI_NOGLOB;
rpmgiFlags giflags = RPMGI_NOGLOB|RPMGI_NOHEADER;
int ec = 0;
qva->qva_gi = rpmgiNew(ts, RPMDBI_ARGLIST, NULL, 0);
qva->qva_gi = rpmgiNew(ts, gitag, gikey, gikeylen);
qva->qva_rc = rpmgiSetArgs(qva->qva_gi, argv, ftsOpts, giflags);
switch (qva->qva_source) {
@ -797,15 +799,13 @@ int rpmcliArgIter(rpmts ts, QVA_t qva, ARGV_t argv)
/*@-nullpass@*/ /* FIX: argv can be NULL, cast to pass argv array */
ec = rpmQueryVerify(qva, ts, (const char *) argv);
/*@=nullpass@*/
rpmtsEmpty(ts);
break;
default:
/*@-boundsread@*/
if (argv != NULL)
while ((arg = *argv++) != NULL) {
ec += rpmQueryVerify(qva, ts, arg);
while (rpmgiNext(qva->qva_gi) == RPMRC_OK) {
ec += rpmQueryVerify(qva, ts, rpmgiHdrPath(qva->qva_gi));
rpmtsEmpty(ts);
}
/*@=boundsread@*/
break;
}

View File

@ -146,17 +146,19 @@ static rpmRC rpmgiLoadReadHeader(rpmgi gi)
rpmRC rpmrc = RPMRC_NOTFOUND;
Header h = NULL;
if (gi->argv != NULL && gi->argv[gi->i] != NULL)
do {
const char * fn; /* XXX gi->hdrPath? */
fn = gi->argv[gi->i];
h = rpmgiReadHeader(gi, fn);
if (h != NULL || (gi->flags & RPMGI_NOHEADER)) {
if (!(gi->flags & RPMGI_NOHEADER)) {
h = rpmgiReadHeader(gi, fn);
if (h != NULL)
rpmrc = RPMRC_OK;
} else
rpmrc = RPMRC_OK;
break;
}
if (gi->flags & RPMGI_NOMANIFEST)
if (rpmrc == RPMRC_OK || gi->flags & RPMGI_NOMANIFEST)
break;
/* Not a header, so try for a manifest. */
@ -169,7 +171,7 @@ static rpmRC rpmgiLoadReadHeader(rpmgi gi)
fn = _free(fn);
} while (1);
if (rpmrc == RPMRC_OK && h != NULL && !(gi->flags & RPMGI_NOHEADER))
if (rpmrc == RPMRC_OK && h != NULL)
gi->h = headerLink(h);
h = headerFree(h);
@ -229,10 +231,10 @@ fprintf(stderr, "*** gi %p\t%p[%d]: %s\n", gi, gi->ftsp, gi->i, fts->fts_path);
/**
* Append globbed arg list to iterator.
* @param gi generalized iterator
* @param argv arg list to be globbed
* @param argv arg list to be globbed (or NULL)
* @returns RPMRC_OK on success
*/
static rpmRC rpmgiGlobArgv(rpmgi gi, ARGV_t argv)
static rpmRC rpmgiGlobArgv(rpmgi gi, /*@null@*/ ARGV_t argv)
/*@globals internalState @*/
/*@modifies gi, internalState @*/
{
@ -242,9 +244,11 @@ static rpmRC rpmgiGlobArgv(rpmgi gi, ARGV_t argv)
int xx;
if (gi->flags & RPMGI_NOGLOB) {
while (argv[ac] != NULL)
ac++;
xx = argvAppend(&gi->argv, argv);
if (argv != NULL) {
while (argv[ac] != NULL)
ac++;
xx = argvAppend(&gi->argv, argv);
}
gi->argc = ac;
return rpmrc;
}
@ -420,9 +424,7 @@ fprintf(stderr, "*** gi %p\t%p\n", gi, gi->mi);
gi->hdrPath = rpmExpand("hdlist h# ", hnum, NULL);
break;
case RPMDBI_ARGLIST:
if (gi->argv == NULL || gi->argv[gi->i] == NULL)
goto enditer;
/* XXX gi->active initialize? */
if (_rpmgi_debug < 0)
fprintf(stderr, "*** gi %p\t%p[%d]: %s\n", gi, gi->argv, gi->i, gi->argv[gi->i]);
/* Read next header, lazily expanding manifests as found. */

View File

@ -172,7 +172,8 @@ rpmts rpmgiTs(/*@null@*/ rpmgi gi)
* @param flags iterator flags
* @returns RPMRC_OK on success
*/
rpmRC rpmgiSetArgs(rpmgi gi, ARGV_t argv, int ftsOpts, rpmgiFlags flags)
rpmRC rpmgiSetArgs(rpmgi gi, /*@null@*/ ARGV_t argv,
int ftsOpts, rpmgiFlags flags)
/*@modifies gi @*/;
#ifdef __cplusplus