audk/StdLib/LibC/Wchar/Copying.c

81 lines
3.0 KiB
C
Raw Normal View History

/** @file
Copying Functions for <wchar.h>.
Unless explicitly stated otherwise, if the execution of a function declared
in this file causes copying to take place between objects that overlap, the
behavior is undefined.
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#include <Uefi.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <LibConfig.h>
#include <wchar.h>
/** The wcscpy function copies the wide string pointed to by s2 (including the
terminating null wide character) into the array pointed to by s1.
@return The wcscpy function returns the value of s1.
**/
wchar_t *wcscpy(wchar_t * __restrict s1, const wchar_t * __restrict s2)
{
return (wchar_t *)StrCpy( (CHAR16 *)s1, (CONST CHAR16 *)s2);
}
/** The wcsncpy function copies not more than n wide characters (those that
follow a null wide character are not copied) from the array pointed to by
s2 to the array pointed to by s1.
If the array pointed to by s2 is a wide string that is shorter than n wide
characters, null wide characters are appended to the copy in the array
pointed to by s1, until n wide characters in all have been written.
@return The wcsncpy function returns the value of s1.
**/
wchar_t *wcsncpy(wchar_t * __restrict s1, const wchar_t * __restrict s2, size_t n)
{
return (wchar_t *)StrnCpy( (CHAR16 *)s1, (CONST CHAR16 *)s2, (UINTN)n);
}
/** The wmemcpy function copies n wide characters from the object pointed to by
s2 to the object pointed to by s1.
Use this function if you know that s1 and s2 DO NOT Overlap. Otherwise,
use wmemmove.
@return The wmemcpy function returns the value of s1.
**/
wchar_t *wmemcpy(wchar_t * __restrict s1, const wchar_t * __restrict s2, size_t n)
{
return (wchar_t *)CopyMem( s1, s2, (UINTN)(n * sizeof(wchar_t)));
}
/** The wmemmove function copies n wide characters from the object pointed to by
s2 to the object pointed to by s1. The objects pointed to by s1 and s2 are
allowed to overlap.
Because the UEFI BaseMemoryLib function CopyMem explicitly handles
overlapping source and destination objects, this function and wmemcpy are
implemented identically.
For programming clarity, it is recommended that you use wmemcpy if you know
that s1 and s2 DO NOT Overlap. If s1 and s2 might possibly overlap, then
use wmemmove.
@return The wmemmove function returns the value of s1.
**/
wchar_t *wmemmove(wchar_t *s1, const wchar_t *s2, size_t n)
{
return (wchar_t *)CopyMem( s1, s2, (UINTN)(n * sizeof(wchar_t)));
}