Index: lib/query.c =================================================================== RCS file: /cvs/devel/rpm/lib/query.c,v retrieving revision 2.173.2.15 retrieving revision 2.173.2.16 diff -a -u -r2.173.2.15 -r2.173.2.16 --- lib/query.c 8 Oct 2006 21:41:45 -0000 2.173.2.15 +++ lib/query.c 30 Oct 2006 02:50:53 -0000 2.173.2.16 @@ -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@*/ } @@ -312,31 +333,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);