| /** @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); | |
| } |