aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src
diff options
context:
space:
mode:
authoratkawa7 <atkawa7@yahoo.com>2017-07-12 20:28:14 -0700
committeratkawa7 <atkawa7@yahoo.com>2017-07-12 20:28:14 -0700
commite9ba08be3aeaaea3cfc5a8455fac41384e2d7f93 (patch)
treeb5eabd96d4ee890a3ef4dad033dc313b785b3c0e /toolsrc/src
parent5f96610af9943ca5d6648a655e110ec08776941d (diff)
downloadvcpkg-e9ba08be3aeaaea3cfc5a8455fac41384e2d7f93.tar.gz
vcpkg-e9ba08be3aeaaea3cfc5a8455fac41384e2d7f93.zip
[vcpkg] remove platform dependency of string format
Diffstat (limited to 'toolsrc/src')
-rw-r--r--toolsrc/src/vcpkg_Strings.cpp34
1 files changed, 22 insertions, 12 deletions
diff --git a/toolsrc/src/vcpkg_Strings.cpp b/toolsrc/src/vcpkg_Strings.cpp
index aafed5fd3..77ff1a106 100644
--- a/toolsrc/src/vcpkg_Strings.cpp
+++ b/toolsrc/src/vcpkg_Strings.cpp
@@ -19,26 +19,36 @@ namespace vcpkg::Strings::details
std::string format_internal(const char* fmtstr, ...)
{
- va_list lst;
- va_start(lst, fmtstr);
+ va_list args;
+ va_start(args, fmtstr);
- const int sz = _vscprintf_l(fmtstr, c_locale(), lst);
- std::string output(sz, '\0');
- _vsnprintf_s_l(&output[0], output.size() + 1, output.size() + 1, fmtstr, c_locale(), lst);
- va_end(lst);
+ int sz = vsnprintf(nullptr, 0, fmtstr, args) + 1;
+
+ char* buffer = new char[sz];
+
+ vsnprintf(buffer, sz, fmtstr, args);
+ va_end(args);
+
+ std::string output(buffer);
+ delete[] buffer;
return output;
}
std::wstring wformat_internal(const wchar_t* fmtstr, ...)
{
- va_list lst;
- va_start(lst, fmtstr);
+ va_list args;
+ va_start(args, fmtstr);
+
+ int sz = vswprintf(nullptr, 0, fmtstr, args) + 1;
+
+ wchar_t* buffer = new wchar_t[sz];
+
+ vswprintf(buffer, sz, fmtstr, args);
+ va_end(args);
- const int sz = _vscwprintf_l(fmtstr, c_locale(), lst);
- std::wstring output(sz, '\0');
- _vsnwprintf_s_l(&output[0], output.size() + 1, output.size() + 1, fmtstr, c_locale(), lst);
- va_end(lst);
+ std::wstring output(buffer);
+ delete[] buffer;
return output;
}