/** fparam_t free function. * Frees the "content" of a fparam, but not the fparam itself. * Note: it doesn't free fp->orig! * Assumes pkg_malloc'ed content. * @param fp - fparam to be freed * */ void fparam_free_contents(fparam_t* fp) { if (fp==0) return; switch(fp->type) { case FPARAM_UNSPEC: case FPARAM_STRING: /* asciiz string, not str */ case FPARAM_INT: case FPARAM_STR: /* nothing to do */ break; case FPARAM_REGEX: if (fp->v.regex){ regfree(fp->v.regex); pkg_free(fp->v.regex); fp->v.regex=0; } break; case FPARAM_AVP: free_avp_name(&fp->v.avp.flags, &fp->v.avp.name); break; case FPARAM_SELECT: if (fp->v.select){ free_select(fp->v.select); fp->v.select=0; } break; case FPARAM_SUBST: if (fp->v.subst){ subst_expr_free(fp->v.subst); fp->v.subst=0; } break; case FPARAM_PVS: if (fp->v.pvs){ pv_spec_free(fp->v.pvs); fp->v.pvs=0; } break; case FPARAM_PVE: if (fp->v.pve){ pv_elem_free_all(fp->v.pve); fp->v.pve=0; } break; } }
static void xl_free_select(str *hp) { if (hp && hp->s) free_select((select_t*)hp->s); }