]>
jfr.im git - irc/quakenet/newserv.git/blob - chanserv/newsearch/csns-qusers.c
5 #include "../../newsearch/newsearch.h"
6 #include "../../lib/flags.h"
7 #include "../chanserv.h"
12 void *qusers_exe(searchCtx
*, struct searchNode
*thenode
, void *theinput
);
13 void qusers_free(searchCtx
*, struct searchNode
*thenode
);
15 struct qusers_localdata
{
20 struct searchNode
*qusers_parse(searchCtx
*ctx
, int argc
, char **argv
) {
21 struct searchNode
*thenode
;
22 struct qusers_localdata
*localdata
;
24 if (!(thenode
=(struct searchNode
*)malloc(sizeof (struct searchNode
)))) {
25 parseError
= "malloc: could not allocate memory for this search.";
29 thenode
->localdata
=localdata
=malloc(sizeof(struct qusers_localdata
));
30 thenode
->returntype
= RETURNTYPE_INT
;
31 thenode
->exe
= qusers_exe
;
32 thenode
->free
= qusers_free
;
35 localdata
->setmodes
=0;
36 localdata
->clearmodes
=0;
38 localdata
->setmodes
=0;
39 localdata
->clearmodes
=~0;
41 setflags(&(localdata
->setmodes
), QCUFLAG_ALL
, argv
[0], rcuflags
, REJECT_NONE
);
42 setflags(&(localdata
->clearmodes
), QCUFLAG_ALL
, argv
[0], rcuflags
, REJECT_NONE
);
44 localdata
->clearmodes
= ~localdata
->clearmodes
;
50 void *qusers_exe(searchCtx
*ctx
, struct searchNode
*thenode
, void *theinput
) {
51 chanindex
*cip
= (chanindex
*)theinput
;
54 struct qusers_localdata
*localdata
=thenode
->localdata
;
55 unsigned long i
,count
=0;
57 if (!(rcp
=cip
->exts
[chanservext
]))
60 for (i
=0;i
<REGCHANUSERHASHSIZE
;i
++) {
61 for (rcup
=rcp
->regusers
[i
];rcup
;rcup
=rcup
->nextbychan
) {
62 if ((rcup
->flags
& localdata
->setmodes
) != localdata
->setmodes
)
65 if (rcup
->flags
& localdata
->clearmodes
)
75 void qusers_free(searchCtx
*ctx
, struct searchNode
*thenode
) {
76 free(thenode
->localdata
);