]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/helperfuncs.cpp
Change the syntax of FOREACH macros to be less dumb.
[user/henk/code/inspircd.git] / src / helperfuncs.cpp
index c7287e661c11f41615d13e22c59c596af9f3d129..2626da6bbd6132518866946809e73fd181503909 100644 (file)
@@ -22,8 +22,6 @@
  */
 
 
-/* $Core */
-
 #ifdef _WIN32
 #define _CRT_RAND_S
 #include <stdlib.h>
@@ -38,7 +36,7 @@ std::string InspIRCd::GetServerDescription(const std::string& servername)
 {
        std::string description;
 
-       FOREACH_MOD(I_OnGetServerDescription,OnGetServerDescription(servername,description));
+       FOREACH_MOD(OnGetServerDescription, (servername,description));
 
        if (!description.empty())
        {
@@ -116,12 +114,6 @@ void InspIRCd::SendError(const std::string &s)
        }
 }
 
-/* return channel count */
-long InspIRCd::ChannelCount()
-{
-       return chanlist->size();
-}
-
 bool InspIRCd::IsValidMask(const std::string &mask)
 {
        const char* dest = mask.c_str();
@@ -242,9 +234,9 @@ void InspIRCd::ProcessColors(file_cache& input)
 }
 
 /* true for valid channel name, false else */
-bool IsChannelHandler::Call(const std::string& chname, size_t max)
+bool IsChannelHandler::Call(const std::string& chname)
 {
-       if (chname.empty() || chname.length() > max)
+       if (chname.empty() || chname.length() > ServerInstance->Config->Limits.ChanMax)
                return false;
 
        if (chname[0] != '#')
@@ -265,9 +257,9 @@ bool IsChannelHandler::Call(const std::string& chname, size_t max)
 }
 
 /* true for valid nickname, false else */
-bool IsNickHandler::Call(const std::string& n, size_t max)
+bool IsNickHandler::Call(const std::string& n)
 {
-       if (n.empty() || n.length() > max)
+       if (n.empty() || n.length() > ServerInstance->Config->Limits.NickMax)
                return false;
 
        for (std::string::const_iterator i = n.begin(); i != n.end(); ++i)
@@ -325,35 +317,13 @@ bool InspIRCd::IsSID(const std::string &str)
                         ((str[2] >= 'A' && str[2] <= 'Z') || isdigit(str[2])));
 }
 
-/* open the proper logfile */
-bool InspIRCd::OpenLog(char**, int)
-{
-       if (!Config->cmdline.writelog) return true; // Skip opening default log if -nolog
-
-       if (Config->cmdline.startup_log.empty())
-               Config->cmdline.startup_log = LOG_PATH "/startup.log";
-       FILE* startup = fopen(Config->cmdline.startup_log.c_str(), "a+");
-
-       if (!startup)
-       {
-               return false;
-       }
-
-       FileWriter* fw = new FileWriter(startup);
-       FileLogStream *f = new FileLogStream((Config->cmdline.forcedebug ? LOG_DEBUG : LOG_DEFAULT), fw);
-
-       this->Logs->AddLogType("*", f, true);
-
-       return true;
-}
-
 void InspIRCd::CheckRoot()
 {
 #ifndef _WIN32
        if (geteuid() == 0)
        {
                std::cout << "ERROR: You are running an irc server as root! DO NOT DO THIS!" << std::endl << std::endl;
-               this->Logs->Log("STARTUP",LOG_DEFAULT,"Can't start as root");
+               this->Logs->Log("STARTUP", LOG_DEFAULT, "Can't start as root");
                Exit(EXIT_STATUS_ROOT);
        }
 #endif
@@ -372,13 +342,9 @@ void InspIRCd::SendWhoisLine(User* user, User* dest, int numeric, const std::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
@@ -424,6 +390,34 @@ unsigned long InspIRCd::Duration(const std::string &str)
        return total + subtotal;
 }
 
+const char* InspIRCd::Format(va_list &vaList, const char* formatString)
+{
+       static std::vector<char> formatBuffer(1024);
+
+       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);
+       }
+
+       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)
 {
        if (sserver.empty())