]>
jfr.im git - irc/quakenet/newserv.git/blob - glines2/gline_alloc.c
3 #include "../core/nsmalloc.h"
11 gline
*gline_freelist
;
17 if( gline_freelist
==NULL
) {
18 gline_freelist
=(gline
*)nsmalloc(POOL_GLINE
,ALLOCUNIT
*sizeof(gline
));
20 for (i
=0;i
<(ALLOCUNIT
-1);i
++) {
21 gline_freelist
[i
].next
=(gline
*)&(gline_freelist
[i
+1]);
23 gline_freelist
[ALLOCUNIT
-1].next
=NULL
;
27 gline_freelist
=(gline
*)gl
->next
;
31 gl
->nextbynonnode
=NULL
;
53 void removeglinefromlists( gline
*gl
) {
56 if (gl
->flags
& GLINE_IPMASK
) {
57 if ( gl
== gl
->node
->exts
[gl_nodeext
]) {
58 gl
->node
->exts
[gl_nodeext
] = gl
->nextbynode
;
60 gl2
= gl
->node
->exts
[gl_nodeext
];
62 if ( gl2
->nextbynode
== gl
) {
63 gl2
->nextbynode
= gl
->nextbynode
;
66 gl2
= gl2
->nextbynode
;
70 if ( gl
== glinelistnonnode
) {
71 glinelistnonnode
= gl
->nextbynonnode
;
73 gl2
= glinelistnonnode
;
75 if ( gl2
->nextbynonnode
== gl
) {
76 gl2
->nextbynonnode
= gl
->nextbynonnode
;
79 gl2
= gl2
->nextbynonnode
;
84 if ( gl
== glinelist
) {
89 if ( gl2
->next
== gl
) {
98 void freegline (gline
*gl
) {
99 gl
->next
=(gline
*)gline_freelist
;
102 freesstring(gl
->nick
);
104 freesstring(gl
->user
);
106 freesstring(gl
->host
);
108 freesstring(gl
->reason
);
110 freesstring(gl
->creator
);
113 derefnode(iptree
, gl
->node
);
118 void removegline( gline
*gl
) {
119 removeglinefromlists(gl
);