fixed last commit
[NeonServV5.git] / ChanNode.c
index d5ef631d9c593c7511649392b1503ca236c92ec7..61e73e4fa9644905e940ee35fd455b96aa28b043 100644 (file)
@@ -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;