diff options
author | Neil MacIntosh <neilmac@microsoft.com> | 2016-09-29 12:51:37 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-09-29 12:51:37 -0700 |
commit | 3e5af6dc4028416603e5d7a4adc93995eb34345f (patch) | |
tree | 9291c59e4ef904e4ac0cce49e734a22ab42bb98c | |
parent | e898a890e097598009c2c079a0254f9823d2d93b (diff) | |
parent | 9e055be6593e11849d4fa7966847054372d025b1 (diff) | |
download | platform_external_Microsoft-GSL-3e5af6dc4028416603e5d7a4adc93995eb34345f.tar.gz platform_external_Microsoft-GSL-3e5af6dc4028416603e5d7a4adc93995eb34345f.tar.bz2 platform_external_Microsoft-GSL-3e5af6dc4028416603e5d7a4adc93995eb34345f.zip |
Fix compilation issues with Cygwin
-rw-r--r-- | gsl/string_span | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/gsl/string_span b/gsl/string_span index cd49998..768bfd5 100644 --- a/gsl/string_span +++ b/gsl/string_span @@ -118,6 +118,24 @@ namespace details return len; #endif } + + inline std::size_t wstring_length(const wchar_t *str, std::size_t n) + { +#ifdef GSL_PLATFORM_HAS_STRNLEN + return wcsnlen(str, n); +#else + if (str == nullptr || n == 0) + return 0; + + std::size_t len = 0; + span<const wchar_t> str_span{str, n}; + + while (len < n && str_span[len]) + len++; + + return len; +#endif + } } // @@ -166,14 +184,14 @@ inline span<const char, dynamic_extent> ensure_z(const char* const& sz, std::ptr inline span<wchar_t, dynamic_extent> ensure_z(wchar_t* const& sz, std::ptrdiff_t max) { - auto len = wcsnlen(sz, narrow_cast<size_t>(max)); + auto len = details::wstring_length(sz, narrow_cast<size_t>(max)); Ensures(sz[len] == 0); return {sz, static_cast<std::ptrdiff_t>(len)}; } inline span<const wchar_t, dynamic_extent> ensure_z(const wchar_t* const& sz, std::ptrdiff_t max) { - auto len = wcsnlen(sz, narrow_cast<size_t>(max)); + auto len = details::wstring_length(sz, narrow_cast<size_t>(max)); Ensures(sz[len] == 0); return {sz, static_cast<std::ptrdiff_t>(len)}; } @@ -230,7 +248,7 @@ namespace details { std::ptrdiff_t operator()(wchar_t* const ptr, std::ptrdiff_t length) noexcept { - return narrow_cast<std::ptrdiff_t>(wcsnlen(ptr, narrow_cast<size_t>(length))); + return narrow_cast<std::ptrdiff_t>(details::wstring_length(ptr, narrow_cast<size_t>(length))); } }; @@ -248,7 +266,7 @@ namespace details { std::ptrdiff_t operator()(const wchar_t* const ptr, std::ptrdiff_t length) noexcept { - return narrow_cast<std::ptrdiff_t>(wcsnlen(ptr, narrow_cast<size_t>(length))); + return narrow_cast<std::ptrdiff_t>(details::wstring_length(ptr, narrow_cast<size_t>(length))); } }; } |