From 8082168c9482dfd27283ab853049278ed21265b1 Mon Sep 17 00:00:00 2001 From: pk910 Date: Fri, 12 Aug 2011 06:24:55 +0200 Subject: [PATCH] fixed last commit --- ChanNode.c | 25 +++++++++++++------------ IRCParser.c | 2 +- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/ChanNode.c b/ChanNode.c index d5ef631..61e73e4 100644 --- a/ChanNode.c +++ b/ChanNode.c @@ -19,7 +19,7 @@ static int modes_with_strarg, modes_with_intarg; #define CHANNEL_MODE_VALUE_INDEX_SHIFT 8 #define CHANNEL_MODE_VALUE_INDEX_MASK (0xff << CHANNEL_MODE_VALUE_INDEX_SHIFT) /* this "bitrange" is reserved for storing the array indexes of the mode values */ -static unsigned char valid_modes[] = { /* Thats our mode list :P */ +static unsigned int valid_modes[] = { /* Thats our mode list :P */ 1, 'b', CHANNEL_MODE_TYPE_A, 2, 'o', CHANNEL_MODE_TYPE_A, 3, 'v', CHANNEL_MODE_TYPE_A, @@ -211,7 +211,7 @@ void checkChannelVisibility(struct ChanNode* chan) { delChannel(chan, 1); } -static int* getModeOptions(char mode) { +static unsigned int* getModeOptions(char mode) { unsigned int *cmode; for (cmode = valid_modes; cmode[1]; cmode += 3) { if(cmode[1] == mode) @@ -221,26 +221,27 @@ static int* getModeOptions(char mode) { } int isModeSet(struct ChanNode* chan, char modeChar) { - int *modeOpt = getModeOptions(modeChar); + unsigned int *modeOpt = getModeOptions(modeChar); return (chan->modes & modeOpt[0]) } void* getModeValue(struct ChanNode* chan, char modeChar) { - int *modeOpt = getModeOptions(modeChar); - int index = (modeOpt[2] & CHANNEL_MODE_VALUE_INDEX_MASK) >> CHANNEL_MODE_VALUE_INDEX_SHIFT; - if((mode[2] & CHANNEL_MODE_VALUE) == CHANNEL_MODE_VALUE_STRING) - return chan->mode_str_args[index]; - if((mode[2] & CHANNEL_MODE_VALUE) == CHANNEL_MODE_VALUE_INTEGER) - return chan->mode_int_args[index]; + #define MODE_VALUE_INDEX (modeOpt[2] & CHANNEL_MODE_VALUE_INDEX_MASK) >> CHANNEL_MODE_VALUE_INDEX_SHIFT + unsigned int *modeOpt = getModeOptions(modeChar); + if((modeOpt[2] & CHANNEL_MODE_VALUE) == CHANNEL_MODE_VALUE_STRING) + return chan->mode_str_args[MODE_VALUE_INDEX]; + if((modeOpt[2] & CHANNEL_MODE_VALUE) == CHANNEL_MODE_VALUE_INTEGER) + return &chan->mode_int_args[MODE_VALUE_INDEX]; return NULL; + #undef MODE_VALUE_INDEX } void parseModes(struct ChanNode* chan, char *modeStr, char **argv, int argc) { int i, argpos = 0, add = 1; - #define MODE_TYPE modeOpt[2] & CHANNEL_MODE_TYPE - #define MODE_VALUE modeOpt[2] & CHANNEL_MODE_VALUE + #define MODE_TYPE (modeOpt[2] & CHANNEL_MODE_TYPE) + #define MODE_VALUE (modeOpt[2] & CHANNEL_MODE_VALUE) #define MODE_VALUE_INDEX (modeOpt[2] & CHANNEL_MODE_VALUE_INDEX_MASK) >> CHANNEL_MODE_VALUE_INDEX_SHIFT - int *modeOpt; + unsigned int *modeOpt; for(i = 0; i < strlen(modeStr); i++) { if(modeStr[i] == '+') { add = 1; diff --git a/IRCParser.c b/IRCParser.c index 464fc70..f4e8bd4 100644 --- a/IRCParser.c +++ b/IRCParser.c @@ -322,7 +322,7 @@ static IRC_CMD(raw_mode) { if(argv[0][0] == '#') { //ChannelMode struct ChanNode *chan = getChanByName(argv[0]); - if(!chan) return; + if(!chan) return 0; event_mode(user, chan, argv[1], argv+2, argc-2); parseModes(chan, argv[1], argv+2, argc-2); } else { -- 2.20.1