mirror of https://github.com/acidanthera/audk.git
112 lines
4.3 KiB
C
112 lines
4.3 KiB
C
/** @file
|
|
Comparison Functions for <string.h>.
|
|
|
|
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 <ctype.h>
|
|
#include <string.h>
|
|
|
|
/** The memcmp function compares the first n characters of the object pointed
|
|
to by s1 to the first n characters of the object pointed to by s2.
|
|
|
|
@return The memcmp function returns an integer greater than, equal to, or
|
|
less than zero, accordingly as the object pointed to by s1 is
|
|
greater than, equal to, or less than the object pointed to by s2.
|
|
**/
|
|
int memcmp(const void *s1, const void *s2, size_t n)
|
|
{
|
|
return (int)CompareMem( s1, s2, n);
|
|
}
|
|
|
|
/** The strcmp function compares the string pointed to by s1 to the string
|
|
pointed to by s2.
|
|
|
|
@return The strcmp function returns an integer greater than, equal to, or
|
|
less than zero, accordingly as the string pointed to by s1 is
|
|
greater than, equal to, or less than the string pointed to by s2.
|
|
**/
|
|
int strcmp(const char *s1, const char *s2)
|
|
{
|
|
return (int)AsciiStrCmp( s1, s2);
|
|
}
|
|
|
|
/** The strcoll function compares the string pointed to by s1 to the string
|
|
pointed to by s2, both interpreted as appropriate to the LC_COLLATE
|
|
category of the current locale.
|
|
|
|
@return The strcoll function returns an integer greater than, equal to,
|
|
or less than zero, accordingly as the string pointed to by s1 is
|
|
greater than, equal to, or less than the string pointed to by s2
|
|
when both are interpreted as appropriate to the current locale.
|
|
**/
|
|
int strcoll(const char *s1, const char *s2)
|
|
{
|
|
/* LC_COLLATE is unimplemented, hence always "C" */
|
|
return (strcmp(s1, s2));
|
|
}
|
|
|
|
/** The strncmp function compares not more than n characters (characters that
|
|
follow a null character are not compared) from the array pointed to by s1
|
|
to the array pointed to by s2.
|
|
|
|
@return The strncmp function returns an integer greater than, equal to,
|
|
or less than zero, accordingly as the possibly null-terminated
|
|
array pointed to by s1 is greater than, equal to, or less than
|
|
the possibly null-terminated array pointed to by s2.
|
|
**/
|
|
int strncmp(const char *s1, const char *s2, size_t n)
|
|
{
|
|
return (int)AsciiStrnCmp( s1, s2, n);
|
|
}
|
|
|
|
/** The strxfrm function transforms the string pointed to by Src and places the
|
|
resulting string into the array pointed to by Dest. The transformation is
|
|
such that if the strcmp function is applied to two transformed strings, it
|
|
returns a value greater than, equal to, or less than zero, corresponding to
|
|
the result of the strcoll function applied to the same two original
|
|
strings. No more than Len characters are placed into the resulting array
|
|
pointed to by Dest, including the terminating null character. If Len is zero,
|
|
Dest is permitted to be a null pointer. If copying takes place between
|
|
objects that overlap, the behavior is undefined.
|
|
|
|
@return The strxfrm function returns the length of the transformed string
|
|
(not including the terminating null character). If the value
|
|
returned is Len or more, the contents of the array pointed to by Dest
|
|
are indeterminate.
|
|
**/
|
|
size_t strxfrm(char * __restrict Dest, const char * __restrict Src, size_t Len)
|
|
{
|
|
size_t srclen, copysize;
|
|
|
|
/*
|
|
* Since locales are unimplemented, this is just a copy.
|
|
*/
|
|
srclen = strlen(Src);
|
|
if (Len != 0) {
|
|
copysize = srclen < Len ? srclen : Len - 1;
|
|
(void)memcpy(Dest, Src, copysize);
|
|
Dest[copysize] = 0;
|
|
}
|
|
return (srclen);
|
|
}
|
|
|
|
/** Case agnostic string comparison for NetBSD compatibility. **/
|
|
int
|
|
strcasecmp(const char *s1, const char *s2)
|
|
{
|
|
return (int)AsciiStriCmp( s1, s2);
|
|
}
|