X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fhelperfuncs.cpp;h=e86c0bc7076d8c911791822e83b8b9d28932486e;hb=d16a4554002e915f4512dc8b72e4a49073931e63;hp=cc760c535dfff52d2f96fc819b311f676f8d2e00;hpb=b36ce84c7da93f680fc397bcb4c877abe063eaaa;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp index cc760c535..e86c0bc70 100644 --- a/src/helperfuncs.cpp +++ b/src/helperfuncs.cpp @@ -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 formatBuffer(1024); - int vsnret = 0; - while ((vsnret = vsnprintf(&formatBuffer[0], formatBuffer.size(), formatString, vaList)) < 0 || static_cast(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(vsnret) < formatBuffer.size()) + { + return &formatBuffer[0]; + } + formatBuffer.resize(formatBuffer.size() * 2); - return &formatBuffer[0]; + } + + throw CoreException(); } const char* InspIRCd::Format(const char* formatString, ...)