Просмотр исходного кода

core: PV_IDX_NONE to point that pv had no index

if index is 0 there were no way to know if the index was there

$x_hdr(A) = "value" needs to append a value
$(x_hdr(A)[0]) = "value" needs to set the value

pv_parse_spec(str *s, pv_spec_p p) was always setting p->pvp.pvi.type
to 0 == PV_IDX_INT
Victor Seva 5 лет назад
Родитель
Сommit
7bb2669528
2 измененных файлов с 8 добавлено и 0 удалено
  1. 7 0
      src/core/pvapi.c
  2. 1 0
      src/core/pvar.h

+ 7 - 0
src/core/pvapi.c

@@ -857,6 +857,7 @@ char* pv_parse_spec2(str *in, pv_spec_p e, int silent)
 	tr = 0;
 	pvstate = 0;
 	memset(e, 0, sizeof(pv_spec_t));
+	e->pvp.pvi.type = PV_IDX_NONE;
 	p = in->s;
 	p++;
 	if(*p==PV_LNBRACKET)
@@ -1369,6 +1370,12 @@ int pv_get_spec_index(struct sip_msg* msg, pv_param_p ip, int *idx, int *flags)
 		*idx = ip->pvi.u.ival;
 		return 0;
 	}
+	if(ip->pvi.type == PV_IDX_NONE)
+	{
+		*flags = PV_IDX_NONE;
+		*idx = ip->pvi.u.ival;
+		return 0;
+	}
 
 	/* pvar */
 	if(pv_get_spec_value(msg, (pv_spec_p)ip->pvi.u.dval, &tv)!=0)

+ 1 - 0
src/core/pvar.h

@@ -61,6 +61,7 @@
 #define PV_IDX_PVAR	1
 #define PV_IDX_ALL	2
 #define PV_IDX_ITR	3
+#define PV_IDX_NONE 4
 
 /*! if PV name is dynamic, integer, or str */
 #define pv_has_dname(pv) ((pv)->pvp.pvn.type==PV_NAME_PVAR)