MCPcopy Create free account
hub / github.com/OpenSIPS/opensips / pv_parse_index

Function pv_parse_index

pvar.c:3991–4047  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3989}
3990
3991int pv_parse_index(pv_spec_p sp, const str *in)
3992{
3993 char *p;
3994 char *s;
3995 int sign;
3996 pv_spec_p nsp = 0;
3997
3998 if(in==NULL || in->s==NULL || sp==NULL)
3999 return -1;
4000 p = in->s;
4001 if(*p==PV_MARKER)
4002 {
4003 nsp = (pv_spec_p)pkg_malloc(sizeof(pv_spec_t));
4004 if(nsp==NULL)
4005 {
4006 LM_ERR("no more memory\n");
4007 return -1;
4008 }
4009 memset(nsp, 0, sizeof(pv_spec_t));
4010 s = pv_parse_spec(in, nsp);
4011 if(s==NULL)
4012 {
4013 LM_ERR("invalid index [%.*s]\n", in->len, in->s);
4014 pv_spec_free(nsp);
4015 return -1;
4016 }
4017 sp->pvp.pvi.type = PV_IDX_PVAR;
4018 sp->pvp.pvi.u.dval = (void*)nsp;
4019 return 0;
4020 }
4021 if(*p=='*' && in->len==1)
4022 {
4023 sp->pvp.pvi.type = PV_IDX_ALL;
4024 return 0;
4025 }
4026 sign = 1;
4027 if(*p=='-')
4028 {
4029 sign = -1;
4030 p++;
4031 }
4032 sp->pvp.pvi.u.ival = 0;
4033 while(p<in->s+in->len && *p>='0' && *p<='9')
4034 {
4035 sp->pvp.pvi.u.ival = sp->pvp.pvi.u.ival * 10 + *p - '0';
4036 p++;
4037 }
4038 if(p!=in->s+in->len)
4039 {
4040 LM_ERR("invalid index [%.*s]\n", in->len, in->s);
4041 return -1;
4042 }
4043 sp->pvp.pvi.u.ival *= sign;
4044 sp->pvp.pvi.type = PV_IDX_INT;
4045
4046 return 0;
4047}
4048

Callers 2

pv_parse_avp_indexFunction · 0.85
pv_parse_branch_indexFunction · 0.85

Calls 2

pv_parse_specFunction · 0.85
pv_spec_freeFunction · 0.85

Tested by

no test coverage detected