*/
-/* $Core */
-
#ifdef _WIN32
#define _CRT_RAND_S
#include <stdlib.h>
{
std::string description;
- FOREACH_MOD(I_OnGetServerDescription,OnGetServerDescription(servername,description));
+ FOREACH_MOD(OnGetServerDescription, (servername,description));
if (!description.empty())
{
}
}
-/* return channel count */
-long InspIRCd::ChannelCount()
-{
- return chanlist->size();
-}
-
bool InspIRCd::IsValidMask(const std::string &mask)
{
const char* dest = mask.c_str();
void InspIRCd::SendWhoisLine(User* user, User* dest, int numeric, const char* format, ...)
{
- char textbuffer[MAXBUF];
- va_list argsPtr;
- va_start (argsPtr, format);
- vsnprintf(textbuffer, MAXBUF, format, argsPtr);
- va_end(argsPtr);
-
- this->SendWhoisLine(user, dest, numeric, std::string(textbuffer));
+ std::string textbuffer;
+ VAFORMAT(textbuffer, format, format)
+ this->SendWhoisLine(user, dest, numeric, textbuffer);
}
/** Refactored by Brain, Jun 2009. Much faster with some clever O(1) array
return total + subtotal;
}
-const char* InspIRCd::Format(const char* formatString, ...)
+const char* InspIRCd::Format(va_list &vaList, const char* formatString)
{
static std::vector<char> formatBuffer(1024);
- int vsnret = 0;
- va_list vaList;
- va_start(vaList, formatString);
- while ((vsnret = vsnprintf(&formatBuffer[0], formatBuffer.size(), formatString, vaList)) < 0 || static_cast<unsigned int>(vsnret) >= formatBuffer.size())
+ while (true)
+ {
+ va_list dst;
+ va_copy(dst, vaList);
+
+ int vsnret = vsnprintf(&formatBuffer[0], formatBuffer.size(), formatString, dst);
+ if (vsnret > 0 && static_cast<unsigned>(vsnret) < formatBuffer.size())
+ {
+ return &formatBuffer[0];
+ }
+
formatBuffer.resize(formatBuffer.size() * 2);
- va_end(vaList);
- return &formatBuffer[0];
+ }
+
+ throw CoreException();
+}
+
+const char* InspIRCd::Format(const char* formatString, ...)
+{
+ const char* ret;
+ VAFORMAT(ret, formatString, formatString);
+ return ret;
}
bool InspIRCd::ULine(const std::string& sserver)