summaryrefslogtreecommitdiff
path: root/src/helperfuncs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/helperfuncs.cpp')
-rw-r--r--src/helperfuncs.cpp30
1 files changed, 17 insertions, 13 deletions
diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp
index cae073ff4..ab9c3f46a 100644
--- a/src/helperfuncs.cpp
+++ b/src/helperfuncs.cpp
@@ -1323,9 +1323,12 @@ void userlist(userrec *user,chanrec *c)
}
char list[MAXBUF];
- size_t dlen = snprintf(list,MAXBUF,"353 %s = %s :", user->nick, c->name);
+ size_t dlen, curlen;
+
+ dlen = curlen = snprintf(list,MAXBUF,"353 %s = %s :", user->nick, c->name);
+
int numusers = 0;
- char* ptr = list + dlen - 1;
+ char* ptr = list + dlen;
CUList *ulist= c->GetUsers();
@@ -1345,25 +1348,26 @@ void userlist(userrec *user,chanrec *c)
continue;
}
- const char* n = cmode(i->second,c);
- if (*n)
- *ptr++ = *n;
- for (char* t = i->second->nick; *t; t++)
- *ptr++ = *t;
- *ptr++ = ' ';
+ size_t ptrlen = snprintf(ptr, MAXBUF, "%s%s ", cmode(i->second, c), i->second->nick);
+
+ curlen += ptrlen;
+ ptr += ptrlen;
+
numusers++;
- if ((ptr - list) > (480-NICKMAX))
+ if (curlen > (480-NICKMAX))
{
/* list overflowed into multiple numerics */
- *--ptr = 0;
WriteServ_NoFormat(user->fd,list);
- dlen = snprintf(list,MAXBUF,"353 %s = %s :", user->nick, c->name);
- ptr = list + dlen - 1;
+
+ /* reset our lengths */
+ dlen = curlen = snprintf(list,MAXBUF,"353 %s = %s :", user->nick, c->name);
+ ptr = list + dlen;
+
+ ptrlen = 0;
numusers = 0;
}
}
- *--ptr = 0;
/* if whats left in the list isnt empty, send it */
if (numusers)