7 #include "asn1parser.h"
10 * Construct a new empty parameters list.
13 asn1p_paramlist_new(int _lineno) {
14 asn1p_paramlist_t *pl;
16 pl = calloc(1, sizeof *pl);
18 pl->_lineno = _lineno;
25 asn1p_paramlist_free(asn1p_paramlist_t *pl) {
28 int i = pl->params_count;
30 asn1p_ref_free(pl->params[i].governor);
31 free(pl->params[i].argument);
32 pl->params[i].governor = 0;
33 pl->params[i].argument = 0;
44 asn1p_paramlist_add_param(asn1p_paramlist_t *pl, asn1p_ref_t *gov, char *arg) {
52 * Make sure there's enough space to insert a new element.
54 if(pl->params_count == pl->params_size) {
55 int newsize = pl->params_size?pl->params_size<<2:4;
57 p = realloc(pl->params,
58 newsize * sizeof(pl->params[0]));
61 pl->params_size = newsize;
62 memset(&pl->params[pl->params_count], 0,
63 (newsize - pl->params_size)
64 * sizeof(pl->params[0]));
72 pl->params[pl->params_count].governor = asn1p_ref_clone(gov);
73 if(pl->params[pl->params_count].governor == NULL)
76 pl->params[pl->params_count].governor = 0;
79 pl->params[pl->params_count].argument = strdup(arg);
80 if(pl->params[pl->params_count].argument) {
84 asn1p_ref_free(pl->params[pl->params_count].governor);
90 asn1p_paramlist_clone(asn1p_paramlist_t *pl) {
91 asn1p_paramlist_t *newpl;
93 newpl = asn1p_paramlist_new(pl->_lineno);
96 for(i = 0; i < pl->params_count; i++) {
97 if(asn1p_paramlist_add_param(newpl,
98 pl->params[i].governor,
99 pl->params[i].argument
101 asn1p_paramlist_free(newpl);