1 /*
2 * binkleyforce -- unix FTN mailer project
3 *
4 * Copyright (c) 1998-2000 Alexander Belkin, 2:5020/1398.11
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * $Id: conf_deinit.c,v 1.1.1.1 2004/09/09 09:52:37 kstepanenkov Exp $
12 */
13
14 #include "includes.h"
15 #include "confread.h"
16 #include "logger.h"
17 #include "util.h"
18
19
deinit_conf(void)20 void deinit_conf(void)
21 {
22 s_cval_entry *ptrl;
23 s_cval_entry *next;
24 int i;
25
26 for( i = 0; bforce_config[i].name; i++ )
27 {
28 for( ptrl = bforce_config[i].data; ptrl; ptrl = next )
29 {
30 next = ptrl->next;
31 deinit_cval_entry(ptrl, bforce_config[i].type);
32 free(ptrl);
33 }
34 bforce_config[i].data = NULL;
35 }
36 }
37
deinit_cval_entry(s_cval_entry * dest,bforce_config_keyword type)38 void deinit_cval_entry(s_cval_entry *dest, bforce_config_keyword type)
39 {
40 /*
41 * Other config variables doesn't use allocated memory
42 */
43 switch(type) {
44 case CT_ADDRESS:
45 case CT_NODELIST:
46 case CT_PASSWORD:
47 if( dest->d.falist.what )
48 free(dest->d.falist.what);
49 break;
50 case CT_DOMAIN:
51 deinit_domain(&dest->d.domain);
52 break;
53 case CT_DIALRESP:
54 deinit_dialresp(&dest->d.dialresp);
55 break;
56 case CT_MODEMPORT:
57 deinit_modemport(&dest->d.modemport);
58 break;
59 case CT_OVERRIDE:
60 deinit_override(&dest->d.override);
61 break;
62 case CT_PATH:
63 case CT_STRING:
64 deinit_string(&dest->d.string);
65 break;
66 case CT_TRANSLATE:
67 deinit_translate(&dest->d.translate);
68 break;
69 default:
70 DEB((D_CONFIG, "deinit_cval_entry: type %d doesn't use dynamic memory",
71 type));
72 }
73 }
74
deinit_dialresp(s_dialresp * dest)75 void deinit_dialresp(s_dialresp *dest)
76 {
77 if( dest->mstr ) free(dest->mstr);
78 }
79
deinit_domain(s_domain * dest)80 void deinit_domain(s_domain *dest)
81 {
82 if( dest->domain ) free(dest->domain);
83 if( dest->path ) free(dest->path);
84 }
85
deinit_expr(s_expr * dest)86 void deinit_expr(s_expr *dest)
87 {
88 if( dest->expr ) free(dest->expr);
89 }
90
deinit_falist(s_falist * dest)91 void deinit_falist(s_falist *dest)
92 {
93 s_falist *ptrl, *next;
94
95 for( ptrl = dest; ptrl; ptrl = next )
96 {
97 next = ptrl->next;
98 if( ptrl->what ) free(ptrl->what);
99 free(ptrl);
100 }
101 }
102
deinit_modemport(s_modemport * dest)103 void deinit_modemport(s_modemport *dest)
104 {
105 if( dest->name ) free(dest->name);
106 }
107
deinit_override(s_override * dest)108 void deinit_override(s_override *dest)
109 {
110 s_override *ptrl, *next;
111
112 if( dest->sIpaddr ) free(dest->sIpaddr);
113 if( dest->sPhone ) free(dest->sPhone);
114 if( dest->sFlags ) free(dest->sFlags);
115 for( ptrl = dest->hidden; ptrl; ptrl = next )
116 {
117 next = ptrl->hidden;
118 if( ptrl->sIpaddr ) free(ptrl->sIpaddr);
119 if( ptrl->sPhone ) free(ptrl->sPhone);
120 if( ptrl->sFlags ) free(ptrl->sFlags);
121 free(ptrl);
122 }
123 }
124
deinit_string(s_string * dest)125 void deinit_string(s_string *dest)
126 {
127 if( dest->str ) free(dest->str);
128 }
129
deinit_translate(s_translate * dest)130 void deinit_translate(s_translate *dest)
131 {
132 if( dest->find ) free(dest->find);
133 if( dest->repl ) free(dest->repl);
134 }
135
136