m_cap: use rb_snprintf_append() instead of pointer math

This commit is contained in:
William Pitcock 2016-03-07 00:12:04 -06:00
parent 105a4985b4
commit ccb75e917e

View file

@ -152,20 +152,16 @@ clicap_generate(struct Client *source_p, const char *subcmd, int flags, int clea
{ {
char buf[BUFSIZE] = { 0 }; char buf[BUFSIZE] = { 0 };
char capbuf[BUFSIZE] = { 0 }; char capbuf[BUFSIZE] = { 0 };
char *p;
int buflen = 0; int buflen = 0;
int curlen, mlen; int curlen, mlen;
struct CapabilityEntry *entry; struct CapabilityEntry *entry;
struct DictionaryIter iter; struct DictionaryIter iter;
mlen = sprintf(buf, ":%s CAP %s %s", mlen = snprintf(buf, sizeof buf, ":%s CAP %s %s",
me.name, me.name,
EmptyString(source_p->name) ? "*" : source_p->name, EmptyString(source_p->name) ? "*" : source_p->name,
subcmd); subcmd);
p = capbuf;
buflen = mlen;
/* shortcut, nothing to do */ /* shortcut, nothing to do */
if(flags == -1) if(flags == -1)
{ {
@ -199,43 +195,25 @@ clicap_generate(struct Client *source_p, const char *subcmd, int flags, int clea
caplen += strlen(data) + 1; caplen += strlen(data) + 1;
/* \r\n\0, possible "-~=", space, " *" */ /* \r\n\0, possible "-~=", space, " *" */
if(buflen + caplen >= BUFSIZE - 10) if(buflen + mlen >= BUFSIZE - 10)
{ {
/* remove our trailing space -- if buflen == mlen /* remove our trailing space -- if buflen == mlen
* here, we didnt even succeed in adding one. * here, we didnt even succeed in adding one.
*/ */
if(buflen != mlen) capbuf[buflen] = '\0';
*(p - 1) = '\0';
else
*p = '\0';
sendto_one(source_p, "%s * :%s", buf, capbuf); sendto_one(source_p, "%s * :%s", buf, capbuf);
p = capbuf;
buflen = mlen; buflen = mlen;
memset(capbuf, 0, sizeof capbuf); memset(capbuf, 0, sizeof capbuf);
} }
if(clear) buflen = rb_snprintf_append(capbuf, sizeof capbuf, "%s%s%s%s ",
{ clear ? "-" : "", entry->cap, data != NULL ? "=" : "", data != NULL ? data : "");
*p++ = '-';
buflen++;
}
if (data == NULL)
curlen = sprintf(p, "%s ", entry->cap);
else
curlen = sprintf(p, "%s=%s ", entry->cap, data);
p += curlen;
buflen += curlen;
} }
/* remove trailing space */ /* remove trailing space */
if(buflen != mlen) capbuf[buflen] = '\0';
*(p - 1) = '\0';
else
*p = '\0';
sendto_one(source_p, "%s :%s", buf, capbuf); sendto_one(source_p, "%s :%s", buf, capbuf);
} }