mirror of
https://github.com/reactos/reactos.git
synced 2026-07-02 13:34:24 +08:00
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.
46 lines
1.1 KiB
C++
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;
|
|
}
|