1 #include <stdlib.h> 2 #include <string.h> 3 4 #include "asn1parser.h" 5 6 /* 7 * Construct a new empty module. 8 */ 9 asn1p_module_t * asn1p_module_new()10asn1p_module_new() { 11 asn1p_module_t *mod; 12 13 mod = calloc(1, sizeof *mod); 14 if(mod) { 15 TQ_INIT(&(mod->exports)); 16 TQ_INIT(&(mod->imports)); 17 TQ_INIT(&(mod->members)); 18 } 19 return mod; 20 } 21 22 /* 23 * Destroy the module. 24 */ 25 void asn1p_module_free(asn1p_module_t * mod)26asn1p_module_free(asn1p_module_t *mod) { 27 if(mod) { 28 asn1p_expr_t *expr; 29 30 if(mod->ModuleName) 31 free(mod->ModuleName); 32 33 if(mod->module_oid) 34 asn1p_oid_free(mod->module_oid); 35 36 while((expr = TQ_REMOVE(&(mod->members), next))) 37 asn1p_expr_free(expr); 38 39 free(mod); 40 } 41 } 42 43 asn1p_t * asn1p_new()44asn1p_new() { 45 asn1p_t *asn; 46 asn = calloc(1, sizeof(*asn)); 47 if(asn) { 48 TQ_INIT(&(asn->modules)); 49 } 50 return asn; 51 } 52 53 54 void asn1p_delete(asn1p_t * asn)55asn1p_delete(asn1p_t *asn) { 56 if(asn) { 57 asn1p_module_t *mod; 58 while((mod = TQ_REMOVE(&(asn->modules), mod_next))) 59 asn1p_module_free(mod); 60 free(asn); 61 } 62 } 63