*/
static void perl_store_vps(VALUE_PAIR *vp, HV *rad_hv)
{
- VALUE_PAIR *nvp, *vpa, *vpn;
- AV *av;
- char namebuf[256], *name;
- char buffer[1024];
- int attr, vendor, len;
+ VALUE_PAIR *nvp, *vpa, *vpn;
+ AV *av;
+ char namebuf[256], *name;
+ char buffer[1024];
+ int len;
hv_undef(rad_hv);
nvp = paircopy(vp);
while (nvp != NULL) {
- name = nvp->name;
- attr = nvp->attribute;
- vendor = nvp->vendor;
- vpa = paircopy2(nvp, attr, vendor, -1);
+ if (nvp->flags.has_tag && (nvp->flags.tag != 0)) {
+ snprintf(namebuf, sizeof(namebuf), "%s:%d",
+ nvp->name, nvp->flags.tag);
+ name = namebuf;
+ } else {
+ name = nvp->name;
+ }
+
+ vpa = paircopy2(nvp, nvp->attribute, nvp->vendor, nvp->flags.tag);
if (vpa->next) {
av = newAV();
- vpn = vpa;
- while (vpn) {
- len = vp_prints_value(buffer, sizeof(buffer),
- vpn, FALSE);
+ for (vpn = vpa; vpn; vpn = vpn->next) {
+ len = vp_prints_value(buffer, sizeof(buffer), vpn, FALSE);
av_push(av, newSVpv(buffer, len));
- vpn = vpn->next;
}
- hv_store(rad_hv, nvp->name, strlen(nvp->name),
- newRV_noinc((SV *) av), 0);
+ hv_store(rad_hv, name, strlen(name), newRV_noinc((SV *)av), 0);
} else {
- if ((vpa->flags.has_tag) &&
- (vpa->flags.tag != 0)) {
- snprintf(namebuf, sizeof(namebuf), "%s:%d",
- nvp->name, nvp->flags.tag);
- name = namebuf;
- }
-
- len = vp_prints_value(buffer, sizeof(buffer),
- vpa, FALSE);
- hv_store(rad_hv, name, strlen(name),
- newSVpv(buffer, len), 0);
+ len = vp_prints_value(buffer, sizeof(buffer), vpa, FALSE);
+ hv_store(rad_hv, name, strlen(name), newSVpv(buffer, len), 0);
}
pairfree(&vpa);
- vpa = nvp; while ((vpa != NULL) && (vpa->attribute == attr) && (vpa->vendor == vendor))
- vpa = vpa->next;
- pairdelete(&nvp, attr, vendor, -1);
- nvp = vpa;
+ pairdelete(&nvp, nvp->attribute, nvp->vendor, nvp->flags.tag);
}
}