diff options
author | Daniel Vassdal <shutter@canternet.org> | 2013-05-12 10:54:07 -0700 |
---|---|---|
committer | attilamolnar <attilamolnar@hush.com> | 2013-05-16 21:34:45 +0200 |
commit | 6153822a2de1867b7b90b95e8ed9bc1a8c792c84 (patch) | |
tree | 4ed80311ecdd5f530997ed0443d318a0ecfdee52 | |
parent | 842245a8d4b59fe2ad9f7709ef5f56d6c48a4c7c (diff) |
Added a function to replace all the ugly sprintf-ing everywhere
-rw-r--r-- | include/inspircd.h | 8 | ||||
-rw-r--r-- | src/helperfuncs.cpp | 13 |
2 files changed, 21 insertions, 0 deletions
diff --git a/include/inspircd.h b/include/inspircd.h index c37658515..04327992c 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -541,6 +541,14 @@ class CoreExport InspIRCd /** Causes the server to exit immediately with exit code 0. * The status code is required for signal handlers, and ignored. */ + + /** Printf-wrapper. + * @param How you want it formatted + * @param ... + * @return The formatted string + */ + static const char* Format(const char* formatString, ...); + static void QuickExit(int status); /** Return a count of channels on the network diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp index c7287e661..8a74a64e4 100644 --- a/src/helperfuncs.cpp +++ b/src/helperfuncs.cpp @@ -424,6 +424,19 @@ unsigned long InspIRCd::Duration(const std::string &str) return total + subtotal; } +const char* InspIRCd::Format(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()) + formatBuffer.resize(formatBuffer.size() * 2); + va_end(vaList); + return &formatBuffer[0]; +} + bool InspIRCd::ULine(const std::string& sserver) { if (sserver.empty()) |