From 816d0fe723283ad76f83b3f6481e31c7acab935a Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 22 May 2019 19:56:19 +0100 Subject: [PATCH] Add std::string format functions --- src/string.cpp | 22 ++++++++++++++++++++++ src/string_func.h | 2 ++ 2 files changed, 24 insertions(+) diff --git a/src/string.cpp b/src/string.cpp index 57fab6a5a9..ec9e4f3ad4 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -161,6 +161,28 @@ char *CDECL str_fmt(const char *str, ...) return p; } +std::string stdstr_vfmt(const char *str, va_list va) +{ + char buf[4096]; + + int len = vseprintf(buf, lastof(buf), str, va); + return std::string(buf, len); +} + +/** + * Format, "printf", into a std::string. + * @param str The formatting string. + * @return The formatted string. + */ +std::string CDECL stdstr_fmt(const char *str, ...) +{ + va_list va; + va_start(va, str); + std::string output = stdstr_vfmt(str, va); + va_end(va); + return output; +} + /** * Scan the string for old values of SCC_ENCODED and fix it to * it's new, static value. diff --git a/src/string_func.h b/src/string_func.h index 0daf00d6be..95bfeb43db 100644 --- a/src/string_func.h +++ b/src/string_func.h @@ -38,6 +38,8 @@ int CDECL seprintf(char *str, const char *last, const char *format, ...) WARN_FO int CDECL vseprintf(char *str, const char *last, const char *format, va_list ap); char *CDECL str_fmt(const char *str, ...) WARN_FORMAT(1, 2); +std::string CDECL stdstr_fmt(const char *str, ...) WARN_FORMAT(1, 2); +std::string stdstr_vfmt(const char *str, va_list va); void str_validate(char *str, const char *last, StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK); std::string str_validate(const std::string &str, StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK);