xref: /reactos/sdk/lib/ucrt/string/wmemmove_s.cpp (revision b09b5584)
1 //
2 // wmemmove_s.cpp
3 //
4 //      Copyright (c) Microsoft Corporation.  All rights reserved.
5 //
6 // Defines wmemmove_s(), which copies wide characters from a source buffer to a
7 // destination buffer.  Overlapping buffers are treated specially, to avoid
8 // propagation.
9 //
10 // Returns 0 if successful; an error code on failure.
11 //
12 #include <corecrt_internal.h>
13 #include <wchar.h>
14 
15 
16 
17 extern "C" errno_t __cdecl wmemmove_s(
18     wchar_t*       const destination,
19     size_t         const size_in_elements,
20     wchar_t const* const source,
21     size_t         const count
22     )
23 {
24     if (count == 0)
25         return 0;
26 
27 #pragma warning(suppress:__WARNING_HIGH_PRIORITY_OVERFLOW_POSTCONDITION)
28     _VALIDATE_RETURN_ERRCODE(destination != nullptr, EINVAL);
29     _VALIDATE_RETURN_ERRCODE(source != nullptr, EINVAL);
30     _VALIDATE_RETURN_ERRCODE(size_in_elements >= count, ERANGE);
31 
32 #pragma warning(suppress:__WARNING_BANNED_API_USAGEL2) /* 28726 */
33     wmemmove(destination, source, count);
34     return 0;
35 }
36