Browse Source

Avoid rounding errors by adding 1 to make limit even (#44)

Bryan Drewery 14 năm trước cách đây
mục cha
commit
26832d2d99
1 tập tin đã thay đổi với 7 bổ sung5 xóa
  1. 7 5
      src/mod/irc.mod/irc.c

+ 7 - 5
src/mod/irc.mod/irc.c

@@ -1400,14 +1400,16 @@ raise_limit(struct chanset_t *chan)
   if (chan->mode_mns_prot & CHANLIMIT)
     return false;
 
-  int nl = (chan->channel.members - chan->channel.splitmembers) + chan->limitraise;	/* new limit */
-  int i = chan->limitraise >> 2;			/* DIV 4 */
+  const int nl = (chan->channel.members - chan->channel.splitmembers) + chan->limitraise;	/* new limit */
+  const int limitraise = (chan->limitraise % 2 == 0) ? chan->limitraise : (chan->limitraise + 1);
+  const int i = limitraise >> 2;			/* DIV 4 */
   /* if the newlimit will be in the range made by these vars, dont change. */
-  int ul = nl + i;					/* upper limit */
-  int ll = nl - i;					/* lower limit */
+  const int ul = nl + i;					/* upper limit */
+  const int ll = nl - i;					/* lower limit */
 
-  if ((chan->channel.maxmembers > ll) && (chan->channel.maxmembers < ul))
+  if ((chan->channel.maxmembers > ll) && (chan->channel.maxmembers < ul)) {
     return false;                     /* the current limit is in the range, so leave it. */
+  }
 
   if (nl != chan->channel.maxmembers) {
     char s[6] = "";