]>
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)";
29 case SEARCHTYPE_CHANNEL
:
38 parseError
="modes: unsupported search type";
42 if (!(localdata
=(struct modes_localdata
*)malloc(sizeof(struct modes_localdata
)))) {
43 parseError
= "malloc: could not allocate memory for this search.";
47 localdata
->setmodes
=0;
48 localdata
->clearmodes
= ~0;
50 setflags(&(localdata
->setmodes
), 0xFFFF, argv
[0], flaglist
, REJECT_NONE
);
51 setflags(&(localdata
->clearmodes
), 0xFFFF, argv
[0], flaglist
, REJECT_NONE
);
53 localdata
->clearmodes
= ~(localdata
->clearmodes
);
55 if (!(thenode
=(struct searchNode
*)malloc(sizeof(struct searchNode
)))) {
56 /* couldn't malloc() memory for thenode, so free localdata to avoid leakage */
57 parseError
= "malloc: could not allocate memory for this search.";
62 thenode
->returntype
= RETURNTYPE_BOOL
;
63 thenode
->localdata
= (void *)localdata
;
64 thenode
->exe
= modes_exe
;
65 thenode
->free
= modes_free
;
70 void *modes_exe(searchCtx
*ctx
, struct searchNode
*thenode
, void *value
) {
71 struct modes_localdata
*localdata
;
76 localdata
= (struct modes_localdata
*)thenode
->localdata
;
79 case SEARCHTYPE_CHANNEL
:
80 cip
=(chanindex
*)value
;
83 flags
=cip
->channel
->flags
;
95 if (~flags
& (localdata
->setmodes
))
98 if (flags
& (localdata
->clearmodes
))
104 void modes_free(searchCtx
*ctx
, struct searchNode
*thenode
) {
105 free (thenode
->localdata
);