else if (OPT_SERV_SYM_EQ("append") || OPT_SERV_SYM_EQ("+="))
else if (OPT_SERV_SYM_EQ("append") || OPT_SERV_SYM_EQ("+=") || OPT_SERV_SYM_EQ(".=") || OPT_SERV_SYM_EQ(">>="))
static int httpd__build_path(struct Con *con, Httpd_req_data *req,                             const Conf_parse *conf, Conf_token *token,                             Vstr_base *s1, size_t pos, size_t len,                             unsigned int lim, int full, Vstr_ref *ref,                             int uri_fname, int *type){  int dummy_type;  int clist = FALSE;  if (!type) type = &dummy_type;  *type = HTTPD_CONF_REQ__TYPE_BUILD_PATH_SKIP;    if (uri_fname)  {    int slash_dot_safe = FALSE;    if (req->chk_encoded_slash && req->chk_encoded_dot)      slash_dot_safe = TRUE;    if (!httpd_policy_uri_lim_eq(s1, &pos, &len, lim, slash_dot_safe, ref))    {      int ret = conf_parse_end_token(conf, token, conf_token_at_depth(token));      ASSERT(ret);      return (TRUE);    }  }  else  {    size_t vhost_len = req->vhost_prefix_len;      if (!httpd_policy_path_lim_eq(s1, &pos, &len, lim, vhost_len, ref))    {      int ret = conf_parse_end_token(conf, token, conf_token_at_depth(token));      ASSERT(ret);      return (TRUE);    }        if (full && vhost_len)    { /* don't want to keep the vhost data */      if (lim != HTTPD_POLICY_PATH_LIM_NONE)        pos -= vhost_len;      else        len -= vhost_len;            ASSERT(req->fname == s1);      vstr_del(req->fname, 1, vhost_len);      req->vhost_prefix_len = 0;    }  }  *type = HTTPD_CONF_REQ__TYPE_BUILD_PATH_ASSIGN;    CONF_SC_TOGGLE_CLIST_VAR(clist);    if (0) { }    else if (OPT_SERV_SYM_EQ("assign") || OPT_SERV_SYM_EQ("="))  {    if (!httpd_policy_build_path(con, req, conf, token, NULL, NULL))      return (FALSE);    if (!vstr_sub_vstr(s1, pos, len,                       conf->tmp, 1, conf->tmp->len, VSTR_TYPE_SUB_BUF_REF))      return (FALSE);  }  else if (OPT_SERV_SYM_EQ("append") || OPT_SERV_SYM_EQ("+="))  {    *type = HTTPD_CONF_REQ__TYPE_BUILD_PATH_APPEND;      if (!httpd_policy_build_path(con, req, conf, token, NULL, NULL))      return (FALSE);    return (vstr_add_vstr(s1, vstr_sc_poslast(pos, len),                          conf->tmp, 1, conf->tmp->len, VSTR_TYPE_ADD_BUF_REF));  }  else if (!clist)  {    const Vstr_sect_node *pv = conf_token_value(token);          if (!pv || !vstr_sub_vstr(s1, pos, len, conf->data, pv->pos, pv->len,                              VSTR_TYPE_SUB_BUF_REF))      return (FALSE);    OPT_SERV_X__ESC_VSTR(s1, pos, pv->len);    goto fin_overwrite;  }      else    return (FALSE); fin_overwrite:  if (lim == HTTPD_POLICY_PATH_LIM_NONE)    req->vhost_prefix_len = 0; /* replaced everything */  return (TRUE);}