]>
jfr.im git - irc/quakenet/newserv.git/blob - newsearch/ns-modes.c
10 struct modes_localdata
{
15 void *modes_exe(searchCtx
*ctx
, struct searchNode
*thenode
, void *theinput
);
16 void modes_free(searchCtx
*ctx
, struct searchNode
*thenode
);
18 struct searchNode
*modes_parse(searchCtx
*ctx
, int argc
, char **argv
) {
19 struct modes_localdata
*localdata
;
20 struct searchNode
*thenode
;
24 parseError
="modes: usage: modes (mode string)";
28 if (ctx
->searchcmd
== reg_chansearch
) {
30 } else if (ctx
->searchcmd
== reg_nicksearch
) {
33 parseError
="modes: unsupported search type";
37 if (!(localdata
=(struct modes_localdata
*)malloc(sizeof(struct modes_localdata
)))) {
38 parseError
= "malloc: could not allocate memory for this search.";
42 localdata
->setmodes
=0;
43 localdata
->clearmodes
= ~0;
45 setflags(&(localdata
->setmodes
), 0xFFFF, argv
[0], flaglist
, REJECT_NONE
);
46 setflags(&(localdata
->clearmodes
), 0xFFFF, argv
[0], flaglist
, REJECT_NONE
);
48 localdata
->clearmodes
= ~(localdata
->clearmodes
);
50 if (!(thenode
=(struct searchNode
*)malloc(sizeof(struct searchNode
)))) {
51 /* couldn't malloc() memory for thenode, so free localdata to avoid leakage */
52 parseError
= "malloc: could not allocate memory for this search.";
57 thenode
->returntype
= RETURNTYPE_BOOL
;
58 thenode
->localdata
= (void *)localdata
;
59 thenode
->exe
= modes_exe
;
60 thenode
->free
= modes_free
;
65 void *modes_exe(searchCtx
*ctx
, struct searchNode
*thenode
, void *value
) {
66 struct modes_localdata
*localdata
;
71 localdata
= (struct modes_localdata
*)thenode
->localdata
;
73 if (ctx
->searchcmd
== reg_chansearch
) {
74 cip
=(chanindex
*)value
;
77 flags
=cip
->channel
->flags
;
78 } else if (ctx
->searchcmd
== reg_nicksearch
) {
85 if (~flags
& (localdata
->setmodes
))
88 if (flags
& (localdata
->clearmodes
))
94 void modes_free(searchCtx
*ctx
, struct searchNode
*thenode
) {
95 free (thenode
->localdata
);