#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,
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)
}
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;