--- rpm-4.4.2/lib/query.c.flush 2006-10-31 12:48:54.000000000 +0000 +++ rpm-4.4.2/lib/query.c 2006-10-31 12:49:05.000000000 +0000 @@ -124,6 +124,28 @@ return str; } +/** + */ +static void flushBuffer(char ** tp, char ** tep, int nonewline) + /*@ modifies *tp, *tep @*/ +{ + char *t, *te; + + t = *tp; + te = *tep; + if (te > t) { + if (!nonewline) { + *te++ = '\n'; + *te = '\0'; + } + rpmMessage(RPMMESS_NORMAL, "%s", t); + te = t; + *t = '\0'; + } + *tp = t; + *tep = te; +} + int showQueryPackage(QVA_t qva, rpmts ts, Header h) { int scareMem = 0; @@ -131,7 +153,6 @@ char * t, * te; char * prefix = NULL; int rc = 0; /* XXX FIXME: need real return code */ - int nonewline = 0; int i; te = t = xmalloc(BUFSIZ); @@ -141,7 +162,6 @@ if (qva->qva_queryFormat != NULL) { const char * str = queryHeader(h, qva->qva_queryFormat); - nonewline = 1; /*@-branchstate@*/ if (str) { size_t tb = (te - t); @@ -157,6 +177,7 @@ /*@=usereleased@*/ /*@=boundswrite@*/ str = _free(str); + flushBuffer(&t, &te, 1); } /*@=branchstate@*/ } @@ -304,31 +325,13 @@ _("package has neither file owner or id lists\n")); } } -/*@-branchstate@*/ - if (te > t) { -/*@-boundswrite@*/ - *te++ = '\n'; - *te = '\0'; - rpmMessage(RPMMESS_NORMAL, "%s", t); - te = t; - *t = '\0'; -/*@=boundswrite@*/ - } -/*@=branchstate@*/ + flushBuffer(&t, &te, 0); } rc = 0; exit: - if (te > t) { - if (!nonewline) { -/*@-boundswrite@*/ - *te++ = '\n'; - *te = '\0'; -/*@=boundswrite@*/ - } - rpmMessage(RPMMESS_NORMAL, "%s", t); - } + flushBuffer(&t, &te, 0); t = _free(t); fi = rpmfiFree(fi);