]>
jfr.im git - irc/quakenet/newserv.git/blob - chanserv/newsearch/csns-qchanflags.c
2 * qchanflags functionality
5 #include "../../newsearch/newsearch.h"
6 #include "../../lib/flags.h"
7 #include "../chanserv.h"
12 void *qchanflags_exe(searchCtx
*, struct searchNode
*thenode
, void *theinput
);
13 void qchanflags_free(searchCtx
*, struct searchNode
*thenode
);
15 struct qchanflags_localdata
{
20 struct searchNode
*qchanflags_parse(searchCtx
*ctx
, int argc
, char **argv
) {
21 struct searchNode
*thenode
;
22 struct qchanflags_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 qchanflags_localdata
));
30 thenode
->returntype
= RETURNTYPE_INT
;
31 thenode
->exe
= qchanflags_exe
;
32 thenode
->free
= qchanflags_free
;
35 localdata
->setmodes
=0;
36 localdata
->clearmodes
=0;
38 struct searchNode
*arg
;
41 localdata
->setmodes
=0;
42 localdata
->clearmodes
=~0;
44 if (!(arg
=argtoconststr("qchanflags", ctx
, argv
[0], &p
))) {
49 setflags(&(localdata
->setmodes
), QCFLAG_ALL
, p
, rcflags
, REJECT_NONE
);
50 setflags(&(localdata
->clearmodes
), QCFLAG_ALL
, p
, rcflags
, REJECT_NONE
);
53 localdata
->clearmodes
= ~localdata
->clearmodes
;
59 void *qchanflags_exe(searchCtx
*ctx
, struct searchNode
*thenode
, void *theinput
) {
60 chanindex
*cip
= (chanindex
*)theinput
;
62 struct qchanflags_localdata
*localdata
=thenode
->localdata
;
64 if (!(rcp
=cip
->exts
[chanservext
]))
67 if (((rcp
->flags
& localdata
->setmodes
) != localdata
->setmodes
) || (rcp
->flags
& localdata
->clearmodes
))
73 void qchanflags_free(searchCtx
*ctx
, struct searchNode
*thenode
) {
74 free(thenode
->localdata
);