From 6e85701ecb09604f2c87010683638ec0446cc515 Mon Sep 17 00:00:00 2001 From: danieldg Date: Wed, 2 Sep 2009 00:45:29 +0000 Subject: Remove a few unneeded string copies in the PRIVMSG path git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11606 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/channels.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src/channels.cpp') diff --git a/src/channels.cpp b/src/channels.cpp index 532953db3..eb4f802f0 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -770,21 +770,28 @@ void Channel::WriteAllExcept(User* user, bool serversource, char status, CUList if (!text) return; + int offset = snprintf(textbuffer,MAXBUF,":%s ", user->GetFullHost().c_str()); + va_start(argsPtr, text); - vsnprintf(textbuffer, MAXBUF, text, argsPtr); + vsnprintf(textbuffer + offset, MAXBUF - offset, text, argsPtr); va_end(argsPtr); - this->WriteAllExcept(user, serversource, status, except_list, std::string(textbuffer)); + this->RawWriteAllExcept(user, serversource, status, except_list, std::string(textbuffer)); } void Channel::WriteAllExcept(User* user, bool serversource, char status, CUList &except_list, const std::string &text) { - CUList *ulist = this->GetUsers(); char tb[MAXBUF]; - snprintf(tb,MAXBUF,":%s %s", user->GetFullHost().c_str(), text.c_str()); + snprintf(tb,MAXBUF,":%s %s", serversource ? ServerInstance->Config->ServerName : user->GetFullHost().c_str(), text.c_str()); std::string out = tb; + this->RawWriteAllExcept(user, serversource, status, except_list, std::string(tb)); +} + +void Channel::RawWriteAllExcept(User* user, bool serversource, char status, CUList &except_list, const std::string &out) +{ + CUList *ulist = this->GetUsers(); for (CUList::iterator i = ulist->begin(); i != ulist->end(); i++) { if ((IS_LOCAL(i->first)) && (except_list.find(i->first) == except_list.end())) @@ -793,10 +800,7 @@ void Channel::WriteAllExcept(User* user, bool serversource, char status, CUList if (status && !strchr(this->GetAllPrefixChars(i->first), status)) continue; - if (serversource) - i->first->WriteServ(text); - else - i->first->Write(out); + i->first->Write(out); } } } -- cgit v1.3.1-10-gc9f91