Files
reactos/sdk/lib/ucrt/string/wcsncpy.cpp
Katayama Hirofumi MZ 300e1d525d [MSVCRT][CRT][UCRT] Disable intrinsic string functions on MSVC (#9157)
VS2022 version 17.2 and later (`_MSC_VER >= 1932`) added new intrinsic
functions (`strncmp`, `strncpy`, `wcsncmp`, and `wcsncpy`).
As we implement these ourselves, we have to avoid compiler error C2169.

This problem surfaced with a recent GitHub Actions update:
https://github.com/actions/runner-images/issues/14017

Use `#pragma function(...)` to disable new intrinsic functions.
2026-06-13 18:10:15 +03:00

46 lines
1.1 KiB
C++

//
// wcsncpy.cpp
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// Defines wcsncpy(), which copies a string from one buffer to another. This
// function copies at most 'count' characters. If fewer than 'count' characters
// are copied, the rest of the buffer is padded with null characters.
//
#include <string.h>
#pragma warning(disable:__WARNING_POSTCONDITION_NULLTERMINATION_VIOLATION) // 26036
#if defined(_MSC_VER) && (defined(_M_ARM) || _MSC_VER >= 1932) // VS2022 version 17.2 and later
#pragma function(wcsncpy)
#endif
extern "C" wchar_t * __cdecl wcsncpy(
wchar_t* const destination,
wchar_t const* const source,
size_t const count
)
{
size_t remaining = count;
wchar_t* destination_it = destination;
wchar_t const* source_it = source;
while (remaining != 0 && (*destination_it++ = *source_it++) != 0)
{
--remaining;
}
if (remaining != 0)
{
while (--remaining != 0)
{
*destination_it++ = L'\0';
}
}
return destination;
}