[master] 51c8c25 Speed up and simplify the varnish ${id} -expect VSC matching
Poul-Henning Kamp
phk at FreeBSD.org
Tue Mar 10 09:15:38 CET 2015
commit 51c8c25689841c1477c409e3f02051913b35220e
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Tue Mar 10 08:15:07 2015 +0000
Speed up and simplify the varnish ${id} -expect VSC matching
diff --git a/bin/varnishtest/vtc_varnish.c b/bin/varnishtest/vtc_varnish.c
index 5704288..da20964 100644
--- a/bin/varnishtest/vtc_varnish.c
+++ b/bin/varnishtest/vtc_varnish.c
@@ -731,39 +731,27 @@ varnish_vclbackend(struct varnish *v, const char *vcl)
*/
struct stat_priv {
- char target[256];
+ char target_type[256];
+ char target_ident[256];
+ char target_name[256];
uintmax_t val;
+ const struct varnish *v;
};
static int
do_stat_cb(void *priv, const struct VSC_point * const pt)
{
struct stat_priv *sp = priv;
- const char *p = sp->target;
- int i;
if (pt == NULL)
return(0);
- if (strcmp(pt->section->type, "")) {
- i = strlen(pt->section->type);
- if (memcmp(pt->section->type, p, i))
- return (0);
- p += i;
- if (*p != '.')
- return (0);
- p++;
- }
- if (strcmp(pt->section->ident, "")) {
- i = strlen(pt->section->ident);
- if (memcmp(pt->section->ident, p, i))
- return (0);
- p += i;
- if (*p != '.')
- return (0);
- p++;
- }
- if (strcmp(pt->desc->name, p))
- return (0);
+
+ if (strcmp(pt->section->type, sp->target_type))
+ return(0);
+ if (strcmp(pt->section->ident, sp->target_ident))
+ return(0);
+ if (strcmp(pt->desc->name, sp->target_name))
+ return(0);
AZ(strcmp(pt->desc->ctype, "uint64_t"));
sp->val = *(const volatile uint64_t*)pt->ptr;
@@ -775,15 +763,28 @@ varnish_expect(const struct varnish *v, char * const *av) {
uint64_t ref;
int good;
char *p;
+ char *q;
int i;
- const char *prefix = "";
struct stat_priv sp;
- if (NULL == strchr(av[0], '.'))
- prefix = "MAIN.";
- snprintf(sp.target, sizeof sp.target, "%s%s", prefix, av[0]);
- sp.target[sizeof sp.target - 1] = '\0';
+ p = strchr(av[0], '.');
+ if (p == NULL) {
+ strcpy(sp.target_type, "MAIN");
+ sp.target_ident[0] = '\0';
+ bprintf(sp.target_name, "%s", av[0]);
+ } else {
+ bprintf(sp.target_type, "%.*s", (int)(p - av[0]), av[0]);
+ p++;
+ q = strrchr(p, '.');
+ bprintf(sp.target_name, "%s", q + 1);
+ if (q == p)
+ sp.target_ident[0] = '\0';
+ else
+ bprintf(sp.target_ident, "%.*s", (int)(q - p), p);
+ }
+
sp.val = 0;
+ sp.v = v;
ref = 0;
good = 0;
for (i = 0; i < 10; i++, (void)usleep(100000)) {
More information about the varnish-commit
mailing list