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