static int mode_limit_simple;
static int mask_pos;
+char cflagsbuf[256];
+char cflagsmyinfo[256];
+
int chmode_flags[256];
+
+/* OPTIMIZE ME! -- dwr */
void
-find_orphaned_cflags(void)
+construct_noparam_modes(void)
{
int i;
- static int prev_chmode_flags[256];
+ char *ptr = cflagsbuf;
+ char *ptr2 = cflagsmyinfo;
+ static int prev_chmode_flags[256];
+
+ *ptr = '\0';
+ *ptr2 = '\0';
- for (i = 0; i < 256; i++)
+ for(i = 0; i < 256; i++)
{
+ if( !(chmode_table[i].set_func == chm_ban) &&
+ !(chmode_table[i].set_func == chm_forward) &&
+ !(chmode_table[i].set_func == chm_throttle) &&
+ !(chmode_table[i].set_func == chm_key) &&
+ !(chmode_table[i].set_func == chm_limit) &&
+ !(chmode_table[i].set_func == chm_op) &&
+ !(chmode_table[i].set_func == chm_voice))
+ {
+ chmode_flags[i] = chmode_table[i].mode_type;
+ }
+ else
+ {
+ chmode_flags[i] = 0;
+ }
+
if (prev_chmode_flags[i] != 0 && prev_chmode_flags[i] != chmode_flags[i])
{
if (chmode_flags[i] == 0)
}
else
prev_chmode_flags[i] = chmode_flags[i];
- }
-}
-
-void
-construct_noparam_modes(void)
-{
- int i;
-
- for(i = 0; i < 256; i++)
- {
- if( !(chmode_table[i].set_func == chm_ban) &&
- !(chmode_table[i].set_func == chm_forward) &&
- !(chmode_table[i].set_func == chm_throttle) &&
- !(chmode_table[i].set_func == chm_key) &&
- !(chmode_table[i].set_func == chm_limit) &&
- !(chmode_table[i].set_func == chm_op) &&
- !(chmode_table[i].set_func == chm_voice))
+
+ switch (chmode_flags[i])
{
- chmode_flags[i] = chmode_table[i].mode_type;
+ case MODE_EXLIMIT:
+ case MODE_DISFORWARD:
+ if(ConfigChannel.use_forward)
+ {
+ *ptr++ = (char) i;
+ }
+
+ break;
+ case MODE_REGONLY:
+ if(rb_dlink_list_length(&service_list))
+ {
+ *ptr++ = (char) i;
+ }
+
+ break;
+ default:
+ if(chmode_flags[i] != 0)
+ {
+ *ptr++ = (char) i;
+ }
}
- else
+
+ /* Should we leave orphaned check here? -- dwr */
+ if(!(chmode_table[i].set_func == chm_nosuch) && !(chmode_table[i].set_func == chm_orphaned))
{
- chmode_flags[i] = 0;
+ *ptr2++ = (char) i;
}
}
- find_orphaned_cflags();
+ *ptr++ = '\0';
+ *ptr2++ = '\0';
}
/*
if(*t != '\0')
user = t;
}
- else if(strchr(mask, '.') != NULL || strchr(mask, ':') != NULL)
+ else if(strchr(mask, '.') != NULL || strchr(mask, ':') != NULL || strchr(mask, '/') != NULL)
{
if(*mask != '\0')
host = mask;
return;
}
- /* flags (possibly upto 32) + 4 with param */
if(MyClient(source_p) && (++mode_limit_simple > MAXMODES_SIMPLE))
return;