[master] 619eb8519 Simplify frag_fields() and add usage asserts.
Poul-Henning Kamp
phk at FreeBSD.org
Mon Nov 5 09:15:13 UTC 2018
commit 619eb85194e86bc884a66eaf4e7bc189e4d13def
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Mon Nov 5 09:06:51 2018 +0000
Simplify frag_fields() and add usage asserts.
diff --git a/bin/varnishncsa/varnishncsa.c b/bin/varnishncsa/varnishncsa.c
index 586f7cec1..6c859358e 100644
--- a/bin/varnishncsa/varnishncsa.c
+++ b/bin/varnishncsa/varnishncsa.c
@@ -776,33 +776,31 @@ frag_fields(int force, const char *b, const char *e, ...)
AN(e);
va_start(ap, e);
- field = va_arg(ap, int);
- frag = va_arg(ap, struct fragment *);
- for (n = 1, q = b; q < e; n++) {
- /* caller must sort the fields, or this loop will not work: */
- assert(field >= n);
- AN(frag);
-
- p = q;
- /* Skip WS */
- while (p < e && isspace(*p))
- p++;
- q = p;
- /* Skip non-WS */
- while (q < e && !isspace(*q))
- q++;
-
- if (field == n) {
- if (frag->gen != CTX.gen || force) {
- /* We only grab the same matching field once */
- frag->gen = CTX.gen;
- frag->b = p;
- frag->e = q;
- }
- field = va_arg(ap, int);
- if (field == 0)
- break;
- frag = va_arg(ap, struct fragment *);
+ n = 0;
+ while (1) {
+ field = va_arg(ap, int);
+ frag = va_arg(ap, struct fragment *);
+ if (field == 0) {
+ AZ(frag);
+ break;
+ }
+ p = q = NULL;
+ while (n < field) {
+ while (b < e && isspace(*b))
+ b++;
+ p = b;
+ while (b < e && !isspace(*b))
+ b++;
+ q = b;
+ n++;
+ }
+ assert(p != NULL && q != NULL);
+ assert(p < e && q > p);
+ if (frag->gen != CTX.gen || force) {
+ /* We only grab the same matching field once */
+ frag->gen = CTX.gen;
+ frag->b = p;
+ frag->e = q;
}
}
va_end(ap);
More information about the varnish-commit
mailing list