diff options
| author | atkawa7 <atkawa7@yahoo.com> | 2017-07-12 20:28:14 -0700 |
|---|---|---|
| committer | atkawa7 <atkawa7@yahoo.com> | 2017-07-12 20:28:14 -0700 |
| commit | e9ba08be3aeaaea3cfc5a8455fac41384e2d7f93 (patch) | |
| tree | b5eabd96d4ee890a3ef4dad033dc313b785b3c0e /toolsrc/src | |
| parent | 5f96610af9943ca5d6648a655e110ec08776941d (diff) | |
| download | vcpkg-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.cpp | 34 |
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; } |
