]>
jfr.im git - irc/quakenet/newserv.git/blob - chanserv/newsearch/csns-qusers.c
ddf0566696b67f4ace85a020125b1519ccee50cb
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 type
, int argc
, char **argv
) {
21 struct searchNode
*thenode
;
22 struct qusers_localdata
*localdata
;
24 if (type
!= SEARCHTYPE_CHANNEL
) {
25 parseError
= "qusers: this function is only valid for channel searches.";
29 if (!(thenode
=(struct searchNode
*)malloc(sizeof (struct searchNode
)))) {
30 parseError
= "malloc: could not allocate memory for this search.";
34 thenode
->localdata
=localdata
=malloc(sizeof(struct qusers_localdata
));
35 thenode
->returntype
= RETURNTYPE_INT
;
36 thenode
->exe
= qusers_exe
;
37 thenode
->free
= qusers_free
;
40 localdata
->setmodes
=0;
41 localdata
->clearmodes
=0;
43 localdata
->setmodes
=0;
44 localdata
->clearmodes
=~0;
46 setflags(&(localdata
->setmodes
), QCUFLAG_ALL
, argv
[0], rcuflags
, REJECT_NONE
);
47 setflags(&(localdata
->clearmodes
), QCUFLAG_ALL
, argv
[0], rcuflags
, REJECT_NONE
);
49 localdata
->clearmodes
= ~localdata
->clearmodes
;
55 void *qusers_exe(searchCtx
*ctx
, struct searchNode
*thenode
, void *theinput
) {
56 chanindex
*cip
= (chanindex
*)theinput
;
59 struct qusers_localdata
*localdata
=thenode
->localdata
;
60 unsigned long i
,count
=0;
62 if (!(rcp
=cip
->exts
[chanservext
]))
65 for (i
=0;i
<REGCHANUSERHASHSIZE
;i
++) {
66 for (rcup
=rcp
->regusers
[i
];rcup
;rcup
=rcup
->nextbychan
) {
67 if ((rcup
->flags
& localdata
->setmodes
) != localdata
->setmodes
)
70 if (rcup
->flags
& localdata
->clearmodes
)
80 void qusers_free(searchCtx
*ctx
, struct searchNode
*thenode
) {
81 free(thenode
->localdata
);