blob: 10aa94c1b5e5ac08ba32101b928095a6b32eeb62 [file] [log] [blame]
Lev Walkinf15320b2004-06-03 03:38:44 +00001#include <stdlib.h>
2#include <string.h>
3
4#include "asn1parser.h"
5
6/*
7 * Construct a new empty module.
8 */
9asn1p_module_t *
10asn1p_module_new() {
11 asn1p_module_t *mod;
12
13 mod = calloc(1, sizeof *mod);
14 if(mod) {
Lev Walkinf15320b2004-06-03 03:38:44 +000015 TQ_INIT(&(mod->exports));
Lev Walkina9532f42006-09-17 04:52:50 +000016 TQ_INIT(&(mod->imports));
Lev Walkinf15320b2004-06-03 03:38:44 +000017 TQ_INIT(&(mod->members));
18 }
19 return mod;
20}
21
22/*
23 * Destroy the module.
24 */
25void
26asn1p_module_free(asn1p_module_t *mod) {
27 if(mod) {
28 asn1p_expr_t *expr;
Bi-Ruei, Chiu3dcf05b2017-05-04 21:45:05 +080029 asn1p_xports_t *xports;
Lev Walkinf15320b2004-06-03 03:38:44 +000030
Lev Walkind8b83642016-03-14 02:00:27 -070031 free(mod->ModuleName);
Bi-Ruei, Chiu12021b52016-11-04 11:59:45 +080032 free(mod->source_file_name);
Lev Walkinf15320b2004-06-03 03:38:44 +000033
Lev Walkin13e57ef2016-03-14 02:05:23 -070034 asn1p_oid_free(mod->module_oid);
Lev Walkinf15320b2004-06-03 03:38:44 +000035
Bi-Ruei, Chiu3dcf05b2017-05-04 21:45:05 +080036 while((xports = TQ_REMOVE(&(mod->exports), xp_next)))
37 asn1p_xports_free(xports);
38
39 while((xports = TQ_REMOVE(&(mod->imports), xp_next)))
40 asn1p_xports_free(xports);
41
Lev Walkinf15320b2004-06-03 03:38:44 +000042 while((expr = TQ_REMOVE(&(mod->members), next)))
43 asn1p_expr_free(expr);
44
45 free(mod);
46 }
47}
48
49asn1p_t *
50asn1p_new() {
51 asn1p_t *asn;
52 asn = calloc(1, sizeof(*asn));
53 if(asn) {
54 TQ_INIT(&(asn->modules));
55 }
56 return asn;
57}
58
59
60void
Lev Walkin9b5df842006-09-12 04:21:30 +000061asn1p_delete(asn1p_t *asn) {
Lev Walkinf15320b2004-06-03 03:38:44 +000062 if(asn) {
63 asn1p_module_t *mod;
64 while((mod = TQ_REMOVE(&(asn->modules), mod_next)))
65 asn1p_module_free(mod);
66 free(asn);
67 }
68}