]>
jfr.im git - irc/quakenet/newserv.git/blob - channel/channelalloc.c
10 chanuserhash
*freehash
;
12 chanindex
*freechanindices
;
14 void initchannelalloc() {
21 /* channel records don't have next pointers.
22 * Overload the index pointer for chaining free channels */
28 if (freechans
==NULL
) {
29 freechans
=(channel
*)malloc(ALLOCUNIT
*sizeof(channel
));
30 for (i
=0;i
<(ALLOCUNIT
-1);i
++) {
31 freechans
[i
].index
=(struct chanindex
*)&(freechans
[i
+1]);
33 freechans
[ALLOCUNIT
-1].index
=NULL
;
37 freechans
=(channel
*)cp
->index
;
42 void freechan(channel
*cp
) {
43 cp
->index
=(struct chanindex
*)freechans
;
50 * Since these things don't naturally have a "next" pointer
51 * we abuse the "content" pointer to build our list of free
54 * Hence some somewhat bizarre casts...
57 chanuserhash
*newchanuserhash(int hashsize
) {
62 freehash
=(chanuserhash
*)malloc(ALLOCUNIT
*sizeof(chanuserhash
));
63 for (i
=0;i
<(ALLOCUNIT
-1);i
++) {
64 freehash
[i
].content
=(unsigned long *)&(freehash
[i
+1]);
66 freehash
[ALLOCUNIT
-1].content
=NULL
;
70 freehash
=(chanuserhash
*)cuhp
->content
;
73 cuhp
->content
=(unsigned long *)malloc(hashsize
*sizeof(unsigned long));
74 for (i
=0;i
<hashsize
;i
++) {
75 cuhp
->content
[i
]=nouser
;
78 cuhp
->hashsize
=hashsize
;
84 void freechanuserhash(chanuserhash
*cuhp
) {
86 cuhp
->content
=(unsigned long *)freehash
;
90 chanban
*getchanban() {
95 freebans
=(chanban
*)malloc(ALLOCUNIT
*sizeof(chanban
));
96 for (i
=0;i
<ALLOCUNIT
-1;i
++) {
97 freebans
[i
].next
=(struct chanban
*)&(freebans
[i
+1]);
99 freebans
[ALLOCUNIT
-1].next
=NULL
;
112 void freechanban(chanban
*cbp
) {
113 cbp
->next
=(struct chanban
*)freebans
;
116 freesstring(cbp
->nick
);
118 freesstring(cbp
->user
);
120 freesstring(cbp
->host
);
125 chanindex
*getchanindex() {
129 if (freechanindices
==NULL
) {
130 freechanindices
=(chanindex
*)malloc(ALLOCUNIT
*sizeof(chanindex
));
131 for(i
=0;i
<ALLOCUNIT
-1;i
++) {
132 freechanindices
[i
].next
=&(freechanindices
[i
+1]);
134 freechanindices
[ALLOCUNIT
-1].next
=NULL
;
138 freechanindices
=cip
->next
;
143 void freechanindex(chanindex
*cip
) {
144 cip
->next
=freechanindices
;