From 5f65c853d9a2b4a95e4492c5391745621069286c Mon Sep 17 00:00:00 2001 From: phk Date: Sun, 15 Jul 2007 07:52:11 +0000 Subject: [PATCH] Make the header-gluing code more readable. git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@1697 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- varnish-cache/bin/varnishd/cache_vrt.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/varnish-cache/bin/varnishd/cache_vrt.c b/varnish-cache/bin/varnishd/cache_vrt.c index 6437f705..dbc6314b 100644 --- a/varnish-cache/bin/varnishd/cache_vrt.c +++ b/varnish-cache/bin/varnishd/cache_vrt.c @@ -123,28 +123,30 @@ vrt_assemble_string(struct http *hp, const char *h, const char *p, va_list ap) u = WS_Reserve(hp->ws, 0); e = b = hp->ws->f; - *e = '\0'; + e += u; if (h != NULL) { x = strlen(h); - if (x + 2 < u) { - memcpy(e, h, x); - e[x] = ' '; - e[x + 1] = '\0'; - } - e += x + 1; + if (b + x < e) + memcpy(b, h, x); + b += x; + if (b + 1 < e) + *b++ = ' '; } while (p != NULL) { x = strlen(p); - if (x + 1 < u) - memcpy(e, p, x); - e += x; + if (b + x < e) + memcpy(b, p, x); + b += x; p = va_arg(ap, const char *); } - *e = '\0'; - if (e > b + u) { + if (b + 1 < e) + *b++ = '\0'; + if (b > e) { WS_Release(hp->ws, 0); return (NULL); } else { + e = b; + b = hp->ws->f; WS_Release(hp->ws, 1 + e - b); return (b); } -- 2.39.5