void vcc_ParseBackend(struct vcc *tl) { struct token *t_first, *t_be; struct symbol *sym; const char *dn; tl->ndirector++; t_first = tl->t; SkipToken(tl, ID); /* ID: backend */ vcc_ExpectVid(tl, "backend"); /* ID: name */ ERRCHK(tl); t_be = tl->t; if (vcc_IdIs(tl->t, "default")) { if (tl->first_director != NULL) { tl->first_director->noref = 0; tl->first_director = NULL; tl->default_director = NULL; } if (tl->default_director != NULL) { VSB_printf(tl->sb, "Only one default director possible.\n"); vcc_ErrWhere(tl, t_first); return; } vcc_NextToken(tl); dn = "vgc_backend_default"; tl->default_director = dn; } else { sym = VCC_HandleSymbol(tl, BACKEND, "vgc_backend"); ERRCHK(tl); dn = sym->rname; if (tl->default_director == NULL) { tl->first_director = sym; tl->default_director = dn; sym->noref = 1; } } Fh(tl, 0, "\nstatic VCL_BACKEND %s;\n", dn); vcc_ParseHostDef(tl, t_be, dn); if (tl->err) { VSB_printf(tl->sb, "\nIn %.*s specification starting at:\n", PF(t_first)); vcc_ErrWhere(tl, t_first); return; } }
void vcc_ParseBackend(struct vcc *tl) { struct token *t_first, *t_be; struct symbol *sym; char vgcname[MAX_BACKEND_NAME + 20]; t_first = tl->t; vcc_NextToken(tl); /* ID: backend */ vcc_ExpectCid(tl); /* ID: name */ ERRCHK(tl); if (tl->t->e - tl->t->b > MAX_BACKEND_NAME) { VSB_printf(tl->sb, "Name of %.*s too long (max %d, is %zu):\n", PF(t_first), MAX_BACKEND_NAME, (size_t)(tl->t->e - tl->t->b)); vcc_ErrWhere(tl, tl->t); return; } t_be = tl->t; vcc_NextToken(tl); sprintf(vgcname, "vgc_backend_%.*s", PF(t_be)); Fh(tl, 0, "\nstatic struct director *%s;\n", vgcname); sym = VCC_HandleSymbol(tl, t_be, BACKEND, "%s", vgcname); ERRCHK(tl); vcc_ParseHostDef(tl, t_be, vgcname); ERRCHK(tl); if (tl->err) { VSB_printf(tl->sb, "\nIn %.*s specification starting at:\n", PF(t_first)); vcc_ErrWhere(tl, t_first); return; } if (tl->default_director == NULL || vcc_IdIs(t_be, "default")) { tl->default_director = sym->rname; tl->t_default_director = t_be; } }
static void vcc_ParseSimpleDirector(struct vcc *tl) { struct host *h; char vgcname[BUFSIZ]; h = TlAlloc(tl, sizeof *h); h->name = tl->t_dir; vcc_DefBackend(tl, tl->t_dir); ERRCHK(tl); sprintf(vgcname, "_%.*s", PF(h->name)); h->vgcname = TlAlloc(tl, strlen(vgcname) + 1); strcpy(h->vgcname, vgcname); vcc_ParseHostDef(tl, -1, vgcname); ERRCHK(tl); VTAILQ_INSERT_TAIL(&tl->hosts, h, list); }