]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/database/chanservdb_alloc.c
Merge.
[irc/quakenet/newserv.git] / chanserv / database / chanservdb_alloc.c
1 /*
2 * chanservdb_alloc.c:
3 * Handles allocation of the various chanserv structures.
4 */
5
6 #include "../chanserv.h"
7 #include "../../core/nsmalloc.h"
8
9 #include <stdlib.h>
10
11 #define ALLOCUNIT 100
12
13 regchan *csfreechans;
14 reguser *csfreeusers;
15 regchanuser *csfreechanusers;
16 regban *csfreeregbans;
17 activeuser *csfreeactiveusers;
18 maildomain *csfreemaildomains;
19
20 void *csmallocs;
21
22 void chanservallocinit() {
23 csfreechans=NULL;
24 csfreeusers=NULL;
25 csfreechanusers=NULL;
26 csfreeregbans=NULL;
27 csfreeactiveusers=NULL;
28 }
29
30 regchan *getregchan() {
31 int i;
32 regchan *rcp;
33
34 if (csfreechans==NULL) {
35 csfreechans=(regchan *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(regchan));
36 for (i=0;i<(ALLOCUNIT-1);i++) {
37 csfreechans[i].index=(chanindex *)&(csfreechans[i+1]);
38 }
39 csfreechans[ALLOCUNIT-1].index=NULL;
40 }
41
42 rcp=csfreechans;
43 csfreechans=(regchan *)rcp->index;
44
45 tagregchan(rcp);
46
47 return rcp;
48 }
49
50 void freeregchan(regchan *rcp) {
51 verifyregchan(rcp);
52 rcp->index=(chanindex *)csfreechans;
53 csfreechans=rcp;
54 }
55
56 reguser *getreguser() {
57 int i;
58 reguser *rup;
59
60 if (csfreeusers==NULL) {
61 csfreeusers=(reguser *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(reguser));
62 for (i=0;i<(ALLOCUNIT-1);i++) {
63 csfreeusers[i].nextbyname=&(csfreeusers[i+1]);
64 }
65 csfreeusers[ALLOCUNIT-1].nextbyname=NULL;
66 }
67
68 rup=csfreeusers;
69 csfreeusers=rup->nextbyname;
70
71 tagreguser(rup);
72
73 return rup;
74 }
75
76 void freereguser(reguser *rup) {
77 verifyreguser(rup);
78 rup->nextbyname=csfreeusers;
79 csfreeusers=rup;
80 }
81
82 regchanuser *getregchanuser() {
83 int i;
84 regchanuser *rcup;
85
86 if (csfreechanusers==NULL) {
87 csfreechanusers=(regchanuser *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(regchanuser));
88 for (i=0;i<(ALLOCUNIT-1);i++) {
89 csfreechanusers[i].nextbyuser=&(csfreechanusers[i+1]);
90 }
91 csfreechanusers[ALLOCUNIT-1].nextbyuser=NULL;
92 }
93
94 rcup=csfreechanusers;
95 csfreechanusers=rcup->nextbyuser;
96
97 tagregchanuser(rcup);
98
99 return rcup;
100 }
101
102 void freeregchanuser(regchanuser *rcup) {
103 verifyregchanuser(rcup);
104 rcup->nextbyuser=csfreechanusers;
105 csfreechanusers=rcup;
106 }
107
108 regban *getregban() {
109 int i;
110 regban *rbp;
111
112 if (csfreeregbans==NULL) {
113 csfreeregbans=(regban *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(regban));
114 for (i=0;i<(ALLOCUNIT-1);i++) {
115 csfreeregbans[i].next=&(csfreeregbans[i+1]);
116 }
117 csfreeregbans[ALLOCUNIT-1].next=NULL;
118 }
119
120 rbp=csfreeregbans;
121 csfreeregbans=rbp->next;
122
123 tagregchanban(rbp);
124
125 return rbp;
126 }
127
128 void freeregban(regban *rbp) {
129 verifyregchanban(rbp);
130 rbp->next=csfreeregbans;
131 csfreeregbans=rbp;
132 }
133
134 activeuser *getactiveuser() {
135 int i;
136 activeuser *aup;
137
138 if (csfreeactiveusers==NULL) {
139 csfreeactiveusers=(activeuser *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(activeuser));
140 for (i=0;i<(ALLOCUNIT-1);i++) {
141 csfreeactiveusers[i].next=&(csfreeactiveusers[i+1]);
142 }
143 csfreeactiveusers[ALLOCUNIT-1].next=NULL;
144 }
145
146 aup=csfreeactiveusers;
147 csfreeactiveusers=aup->next;
148
149 tagactiveuser(aup);
150
151 aup->authattempts=0;
152 aup->helloattempts=0;
153 aup->entropyttl=0;
154
155 return aup;
156 }
157
158 void freeactiveuser(activeuser *aup) {
159 verifyactiveuser(aup);
160 aup->next=csfreeactiveusers;
161 csfreeactiveusers=aup;
162 }
163
164 maildomain *getmaildomain() {
165 int i;
166 maildomain *mdp;
167
168 if (csfreemaildomains==NULL) {
169 csfreemaildomains=(maildomain *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(maildomain));
170 for (i=0;i<(ALLOCUNIT-1);i++) {
171 csfreemaildomains[i].nextbyname=&(csfreemaildomains[i+1]);
172 }
173 csfreemaildomains[ALLOCUNIT-1].nextbyname=NULL;
174 }
175
176 mdp=csfreemaildomains;
177 csfreemaildomains=mdp->nextbyname;
178
179 tagmaildomain(mdp);
180
181 return mdp;
182 }
183
184 void freemaildomain(maildomain *mdp) {
185 verifymaildomain(mdp);
186 mdp->nextbyname=csfreemaildomains;
187 csfreemaildomains=mdp;
188 }
189
190 maillock *getmaillock() {
191 /* we don't create too many of these */
192 maillock *mlp = nsmalloc(POOL_CHANSERVDB,sizeof(maillock));
193 tagmaillock(mlp);
194
195 return mlp;
196 }
197
198 void freemaillock(maillock *mlp) {
199 verifymaillock(mlp);
200
201 freesstring(mlp->pattern);
202 freesstring(mlp->reason);
203 nsfree(POOL_CHANSERVDB,mlp);
204 }