From 7c35d7dcd0d5f382d2c0dc4dc1b116b674e7b556 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Sat, 30 May 2015 03:54:15 -0400 Subject: [PATCH] Added macro JUPITER_VSCPRINTF; replaced some vsnprintf() calls with JUPITER_VSCPRINTF. --- Jupiter/CString_Imp.h | 14 ++++++++++++-- Jupiter/String_Imp.h | 18 ++++++++++++++---- Release/Jupiter.lib | Bin 267778 -> 267778 bytes 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/Jupiter/CString_Imp.h b/Jupiter/CString_Imp.h index 1509558..efcd5ff 100644 --- a/Jupiter/CString_Imp.h +++ b/Jupiter/CString_Imp.h @@ -38,6 +38,16 @@ #endif // va_copy +#if !defined JUPITER_VSCPRINTF + +#if defined _WIN32 +#define JUPITER_VSCPRINTF(format, format_args) _vscprintf(format, format_args) +#else // _WIN32 +#define JUPITER_VSCPRINTF(format, format_args) vsnprintf(nullptr, 0, format, format_args) +#endif // _WIN32 + +#endif // JUPITER_VSCPRINTF + /** * IMPLEMENTATION: * CString_Type @@ -141,7 +151,7 @@ template<> size_t inline Jupiter::CString_Type::vformat(const char *format int minLen; va_list sargs; va_copy(sargs, args); - minLen = vsnprintf(nullptr, 0, format, sargs); + minLen = JUPITER_VSCPRINTF(format, sargs); va_end(sargs); if (minLen < 0) return 0; // We simply can not work with this. this->setBufferSizeNoCopy(minLen); @@ -178,7 +188,7 @@ template<> size_t inline Jupiter::CString_Type::avformat(const char *forma int minLen; va_list sargs; va_copy(sargs, args); - minLen = vsnprintf(nullptr, 0, format, sargs); + minLen = JUPITER_VSCPRINTF(format, sargs); va_end(sargs); if (minLen < 0) return 0; // We simply can not work with this. this->setBufferSize(Jupiter::String_Type::length + minLen); diff --git a/Jupiter/String_Imp.h b/Jupiter/String_Imp.h index 9b65847..7e093a9 100644 --- a/Jupiter/String_Imp.h +++ b/Jupiter/String_Imp.h @@ -37,6 +37,16 @@ #endif // va_copy +#if !defined JUPITER_VSCPRINTF + +#if defined _WIN32 +#define JUPITER_VSCPRINTF(format, format_args) _vscprintf(format, format_args) +#else // _WIN32 +#define JUPITER_VSCPRINTF(format, format_args) vsnprintf(nullptr, 0, format, format_args) +#endif // _WIN32 + +#endif // JUPITER_VSCPRINTF + /** * IMPLEMENTATION: * String_Strict @@ -100,7 +110,7 @@ template<> size_t inline Jupiter::String_Strict::vformat(const char *forma int minLen; va_list sargs; va_copy(sargs, args); - minLen = vsnprintf(nullptr, 0, format, sargs); + minLen = JUPITER_VSCPRINTF(format, sargs); va_end(sargs); if (minLen < 0) return 0; // We simply can not work with this. @@ -137,7 +147,7 @@ template<> size_t inline Jupiter::String_Strict::avformat(const char *form int minLen; va_list sargs; va_copy(sargs, args); - minLen = vsnprintf(nullptr, 0, format, sargs); + minLen = JUPITER_VSCPRINTF(format, sargs); va_end(sargs); if (minLen < 0) return 0; // We simply can not work with this. @@ -390,7 +400,7 @@ template<> size_t inline Jupiter::String_Loose::vformat(const char *format int minLen; va_list sargs; va_copy(sargs, args); - minLen = vsnprintf(nullptr, 0, format, sargs); + minLen = JUPITER_VSCPRINTF(format, sargs); va_end(sargs); if (minLen < 0) return 0; // We simply can not work with this. @@ -427,7 +437,7 @@ template<> size_t inline Jupiter::String_Loose::avformat(const char *forma int minLen; va_list sargs; va_copy(sargs, args); - minLen = vsnprintf(nullptr, 0, format, sargs); + minLen = JUPITER_VSCPRINTF(format, sargs); va_end(sargs); if (minLen < 0) return 0; // We simply can not work with this. diff --git a/Release/Jupiter.lib b/Release/Jupiter.lib index dc39e41a77e72eb4ee24ba0160e751cd2c673b7b..f3edbf68f3d5756d5a688f8c7ed39ff3dee06963 100644 GIT binary patch delta 20124 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 PDvTCHy7|vU`x5>axpiQZ delta 20107 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 SfE7kGKT;6s=06+hiTf|db^I^@