]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/helperfuncs.cpp
Watch mode names with ModeWatchers instead of mode letters
[user/henk/code/inspircd.git] / src / helperfuncs.cpp
index cc760c535dfff52d2f96fc819b311f676f8d2e00..e86c0bc7076d8c911791822e83b8b9d28932486e 100644 (file)
@@ -401,10 +401,22 @@ unsigned long InspIRCd::Duration(const std::string &str)
 const char* InspIRCd::Format(va_list &vaList, const char* formatString)
 {
        static std::vector<char> formatBuffer(1024);
-       int vsnret = 0;
-       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);
-       return &formatBuffer[0];
+       }
+
+       throw CoreException();
 }
 
 const char* InspIRCd::Format(const char* formatString, ...)