2013/5/23 Victor Seva <linuxmaniac(a)torreviejawireless.org>rg>:
2013/5/23 Daniel-Constantin Mierla
<miconda(a)gmail.com>om>:
- update the interpreter to use pv cache instead
of own spec per pv (I can
do it, being in my list and hopefully is no big change)
I will try to do it myself just to get familliar with this area. Let's
see how it goes.
You mean modifiing cfg.y on:
pvar: PVAR {
pv_spec=pkg_malloc(sizeof(*pv_spec));
if (!pv_spec) {
yyerror("Not enough memory");
YYABORT;
}
memset(pv_spec, 0, sizeof(*pv_spec));
s_tmp.s=$1; s_tmp.len=strlen($1);
if (pv_parse_spec(&s_tmp, pv_spec)==0){
yyerror("unknown script pseudo variable %s", $1 );
pkg_free(pv_spec);
pv_spec=0;
YYABORT;
}
$$=pv_spec;
}
;
avp_pvar: AVP_OR_PVAR {
lval_tmp=pkg_malloc(sizeof(*lval_tmp));
if (!lval_tmp) {
yyerror("Not enough memory");
YYABORT;
}
memset(lval_tmp, 0, sizeof(*lval_tmp));
s_tmp.s=$1; s_tmp.len=strlen(s_tmp.s);
if (pv_parse_spec2(&s_tmp, &lval_tmp->lv.pvs, 1)==0){
/* not a pvar, try avps */
/* lval_tmp might be partially filled by the failed
pv_parse_spec2() (especially if the avp name is the
same as a pv class) => clean it again */
memset(lval_tmp, 0, sizeof(*lval_tmp));
lval_tmp->lv.avps.type|= AVP_NAME_STR;
lval_tmp->lv.avps.name.s.s = s_tmp.s+1;
lval_tmp->lv.avps.name.s.len = s_tmp.len-1;
lval_tmp->type=LV_AVP;
}else{
lval_tmp->type=LV_PVAR;
}
$$ = lval_tmp;
DBG("parsed ambigous avp/pvar \"%.*s\" to %d\n",
s_tmp.len, s_tmp.s, lval_tmp->type);
}
;
Not malloc pv_spec and instead use pv_cache_get()?
Cheers,
Victor