mirror of
https://github.com/reactos/reactos.git
synced 2025-06-16 10:08:29 +00:00
46 lines
1,015 B
C++
46 lines
1,015 B
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
|
||
|
|
||
|
|
||
|
#ifdef _M_ARM
|
||
|
#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;
|
||
|
}
|