]>
jfr.im git - irc/quakenet/newserv.git/blob - chanserv/database/chanservdb_alloc.c
3 * Handles allocation of the various chanserv structures.
6 #include "../chanserv.h"
13 regchanuser
*csfreechanusers
;
14 nicklist
*csfreenicklists
;
15 regban
*csfreeregbans
;
16 activeuser
*csfreeactiveusers
;
20 void chanservallocinit() {
26 csfreeactiveusers
=NULL
;
30 void *csmalloc(size_t size
) {
33 /* Get the requested memory, with one extra pointer at the beginning */
34 mem
=(void **)malloc(size
+sizeof(void *));
36 /* Set the first word to point at the last thing we got */
39 /* Now set the "last chunk" pointer to the address of this one */
40 csmallocs
=(void *)mem
;
42 /* return the rest of the memory to the caller */
43 return (void *)(mem
+1);
48 * Free all the memory we allocated for chanserv structures.
63 regchan
*getregchan() {
67 if (csfreechans
==NULL
) {
68 csfreechans
=(regchan
*)csmalloc(ALLOCUNIT
*sizeof(regchan
));
69 for (i
=0;i
<(ALLOCUNIT
-1);i
++) {
70 csfreechans
[i
].index
=(chanindex
*)&(csfreechans
[i
+1]);
72 csfreechans
[ALLOCUNIT
-1].index
=NULL
;
76 csfreechans
=(regchan
*)rcp
->index
;
83 void freeregchan(regchan
*rcp
) {
85 rcp
->index
=(chanindex
*)csfreechans
;
89 reguser
*getreguser() {
93 if (csfreeusers
==NULL
) {
94 csfreeusers
=(reguser
*)csmalloc(ALLOCUNIT
*sizeof(reguser
));
95 for (i
=0;i
<(ALLOCUNIT
-1);i
++) {
96 csfreeusers
[i
].nextbyname
=&(csfreeusers
[i
+1]);
98 csfreeusers
[ALLOCUNIT
-1].nextbyname
=NULL
;
102 csfreeusers
=rup
->nextbyname
;
109 void freereguser(reguser
*rup
) {
111 rup
->nextbyname
=csfreeusers
;
115 regchanuser
*getregchanuser() {
119 if (csfreechanusers
==NULL
) {
120 csfreechanusers
=(regchanuser
*)csmalloc(ALLOCUNIT
*sizeof(regchanuser
));
121 for (i
=0;i
<(ALLOCUNIT
-1);i
++) {
122 csfreechanusers
[i
].nextbyuser
=&(csfreechanusers
[i
+1]);
124 csfreechanusers
[ALLOCUNIT
-1].nextbyuser
=NULL
;
127 rcup
=csfreechanusers
;
128 csfreechanusers
=rcup
->nextbyuser
;
130 tagregchanuser(rcup
);
135 void freeregchanuser(regchanuser
*rcup
) {
136 verifyregchanuser(rcup
);
137 rcup
->nextbyuser
=csfreechanusers
;
138 csfreechanusers
=rcup
;
141 nicklist
*getnicklist() {
145 if (csfreenicklists
==NULL
) {
146 csfreenicklists
=(nicklist
*)csmalloc(ALLOCUNIT
*sizeof(nicklist
));
147 for (i
=0;i
<(ALLOCUNIT
-1);i
++) {
148 csfreenicklists
[i
].next
=&(csfreenicklists
[i
+1]);
150 csfreenicklists
[ALLOCUNIT
-1].next
=NULL
;
154 csfreenicklists
=nlp
->next
;
159 void freenicklist(nicklist
*nlp
) {
160 nlp
->next
=csfreenicklists
;
164 regban
*getregban() {
168 if (csfreeregbans
==NULL
) {
169 csfreeregbans
=(regban
*)csmalloc(ALLOCUNIT
*sizeof(regban
));
170 for (i
=0;i
<(ALLOCUNIT
-1);i
++) {
171 csfreeregbans
[i
].next
=&(csfreeregbans
[i
+1]);
173 csfreeregbans
[ALLOCUNIT
-1].next
=NULL
;
177 csfreeregbans
=rbp
->next
;
184 void freeregban(regban
*rbp
) {
185 verifyregchanban(rbp
);
186 rbp
->next
=csfreeregbans
;
190 activeuser
*getactiveuser() {
194 if (csfreeactiveusers
==NULL
) {
195 csfreeactiveusers
=(activeuser
*)csmalloc(ALLOCUNIT
*sizeof(activeuser
));
196 for (i
=0;i
<(ALLOCUNIT
-1);i
++) {
197 csfreeactiveusers
[i
].next
=&(csfreeactiveusers
[i
+1]);
199 csfreeactiveusers
[ALLOCUNIT
-1].next
=NULL
;
202 aup
=csfreeactiveusers
;
203 csfreeactiveusers
=aup
->next
;
213 void freeactiveuser(activeuser
*aup
) {
214 verifyactiveuser(aup
);
215 aup
->next
=csfreeactiveusers
;
216 csfreeactiveusers
=aup
;