]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/database/chanservdb_alloc.c
Make valgrind a bit happier.
[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 nicklist *csfreenicklists;
17 regban *csfreeregbans;
18 activeuser *csfreeactiveusers;
19
20 void *csmallocs;
21
22 void chanservallocinit() {
23 csfreechans=NULL;
24 csfreeusers=NULL;
25 csfreechanusers=NULL;
26 csfreenicklists=NULL;
27 csfreeregbans=NULL;
28 csfreeactiveusers=NULL;
29 }
30
31 regchan *getregchan() {
32 int i;
33 regchan *rcp;
34
35 if (csfreechans==NULL) {
36 csfreechans=(regchan *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(regchan));
37 for (i=0;i<(ALLOCUNIT-1);i++) {
38 csfreechans[i].index=(chanindex *)&(csfreechans[i+1]);
39 }
40 csfreechans[ALLOCUNIT-1].index=NULL;
41 }
42
43 rcp=csfreechans;
44 csfreechans=(regchan *)rcp->index;
45
46 tagregchan(rcp);
47
48 return rcp;
49 }
50
51 void freeregchan(regchan *rcp) {
52 verifyregchan(rcp);
53 rcp->index=(chanindex *)csfreechans;
54 csfreechans=rcp;
55 }
56
57 reguser *getreguser() {
58 int i;
59 reguser *rup;
60
61 if (csfreeusers==NULL) {
62 csfreeusers=(reguser *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(reguser));
63 for (i=0;i<(ALLOCUNIT-1);i++) {
64 csfreeusers[i].nextbyname=&(csfreeusers[i+1]);
65 }
66 csfreeusers[ALLOCUNIT-1].nextbyname=NULL;
67 }
68
69 rup=csfreeusers;
70 csfreeusers=rup->nextbyname;
71
72 tagreguser(rup);
73
74 return rup;
75 }
76
77 void freereguser(reguser *rup) {
78 verifyreguser(rup);
79 rup->nextbyname=csfreeusers;
80 csfreeusers=rup;
81 }
82
83 regchanuser *getregchanuser() {
84 int i;
85 regchanuser *rcup;
86
87 if (csfreechanusers==NULL) {
88 csfreechanusers=(regchanuser *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(regchanuser));
89 for (i=0;i<(ALLOCUNIT-1);i++) {
90 csfreechanusers[i].nextbyuser=&(csfreechanusers[i+1]);
91 }
92 csfreechanusers[ALLOCUNIT-1].nextbyuser=NULL;
93 }
94
95 rcup=csfreechanusers;
96 csfreechanusers=rcup->nextbyuser;
97
98 tagregchanuser(rcup);
99
100 return rcup;
101 }
102
103 void freeregchanuser(regchanuser *rcup) {
104 verifyregchanuser(rcup);
105 rcup->nextbyuser=csfreechanusers;
106 csfreechanusers=rcup;
107 }
108
109 nicklist *getnicklist() {
110 int i;
111 nicklist *nlp;
112
113 if (csfreenicklists==NULL) {
114 csfreenicklists=(nicklist *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(nicklist));
115 for (i=0;i<(ALLOCUNIT-1);i++) {
116 csfreenicklists[i].next=&(csfreenicklists[i+1]);
117 }
118 csfreenicklists[ALLOCUNIT-1].next=NULL;
119 }
120
121 nlp=csfreenicklists;
122 csfreenicklists=nlp->next;
123
124 return nlp;
125 }
126
127 void freenicklist(nicklist *nlp) {
128 nlp->next=csfreenicklists;
129 csfreenicklists=nlp;
130 }
131
132 regban *getregban() {
133 int i;
134 regban *rbp;
135
136 if (csfreeregbans==NULL) {
137 csfreeregbans=(regban *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(regban));
138 for (i=0;i<(ALLOCUNIT-1);i++) {
139 csfreeregbans[i].next=&(csfreeregbans[i+1]);
140 }
141 csfreeregbans[ALLOCUNIT-1].next=NULL;
142 }
143
144 rbp=csfreeregbans;
145 csfreeregbans=rbp->next;
146
147 tagregchanban(rbp);
148
149 return rbp;
150 }
151
152 void freeregban(regban *rbp) {
153 verifyregchanban(rbp);
154 rbp->next=csfreeregbans;
155 csfreeregbans=rbp;
156 }
157
158 activeuser *getactiveuser() {
159 int i;
160 activeuser *aup;
161
162 if (csfreeactiveusers==NULL) {
163 csfreeactiveusers=(activeuser *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(activeuser));
164 for (i=0;i<(ALLOCUNIT-1);i++) {
165 csfreeactiveusers[i].next=&(csfreeactiveusers[i+1]);
166 }
167 csfreeactiveusers[ALLOCUNIT-1].next=NULL;
168 }
169
170 aup=csfreeactiveusers;
171 csfreeactiveusers=aup->next;
172
173 tagactiveuser(aup);
174
175 aup->rup=NULL;
176 aup->authattempts=0;
177
178 return aup;
179 }
180
181 void freeactiveuser(activeuser *aup) {
182 verifyactiveuser(aup);
183 aup->next=csfreeactiveusers;
184 csfreeactiveusers=aup;
185 }