Vishal Bhoj | 82c8071 | 2015-12-15 21:13:33 +0530 | [diff] [blame^] | 1 | /** @file
|
| 2 | Comparison Functions for <string.h>.
|
| 3 |
|
| 4 | Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
| 5 | This program and the accompanying materials are licensed and made available under
|
| 6 | the terms and conditions of the BSD License that accompanies this distribution.
|
| 7 | The full text of the license may be found at
|
| 8 | http://opensource.org/licenses/bsd-license.php.
|
| 9 |
|
| 10 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
| 11 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
| 12 | **/
|
| 13 | #include <Uefi.h>
|
| 14 | #include <Library/BaseLib.h>
|
| 15 | #include <Library/BaseMemoryLib.h>
|
| 16 |
|
| 17 | #include <LibConfig.h>
|
| 18 |
|
| 19 | #include <ctype.h>
|
| 20 | #include <string.h>
|
| 21 |
|
| 22 | /** The memcmp function compares the first n characters of the object pointed
|
| 23 | to by s1 to the first n characters of the object pointed to by s2.
|
| 24 |
|
| 25 | @return The memcmp function returns an integer greater than, equal to, or
|
| 26 | less than zero, accordingly as the object pointed to by s1 is
|
| 27 | greater than, equal to, or less than the object pointed to by s2.
|
| 28 | **/
|
| 29 | int memcmp(const void *s1, const void *s2, size_t n)
|
| 30 | {
|
| 31 | return (int)CompareMem( s1, s2, n);
|
| 32 | }
|
| 33 |
|
| 34 | /** The strcmp function compares the string pointed to by s1 to the string
|
| 35 | pointed to by s2.
|
| 36 |
|
| 37 | @return The strcmp function returns an integer greater than, equal to, or
|
| 38 | less than zero, accordingly as the string pointed to by s1 is
|
| 39 | greater than, equal to, or less than the string pointed to by s2.
|
| 40 | **/
|
| 41 | int strcmp(const char *s1, const char *s2)
|
| 42 | {
|
| 43 | return (int)AsciiStrCmp( s1, s2);
|
| 44 | }
|
| 45 |
|
| 46 | /** The strcoll function compares the string pointed to by s1 to the string
|
| 47 | pointed to by s2, both interpreted as appropriate to the LC_COLLATE
|
| 48 | category of the current locale.
|
| 49 |
|
| 50 | @return The strcoll function returns an integer greater than, equal to,
|
| 51 | or less than zero, accordingly as the string pointed to by s1 is
|
| 52 | greater than, equal to, or less than the string pointed to by s2
|
| 53 | when both are interpreted as appropriate to the current locale.
|
| 54 | **/
|
| 55 | int strcoll(const char *s1, const char *s2)
|
| 56 | {
|
| 57 | /* LC_COLLATE is unimplemented, hence always "C" */
|
| 58 | return (strcmp(s1, s2));
|
| 59 | }
|
| 60 |
|
| 61 | /** The strncmp function compares not more than n characters (characters that
|
| 62 | follow a null character are not compared) from the array pointed to by s1
|
| 63 | to the array pointed to by s2.
|
| 64 |
|
| 65 | @return The strncmp function returns an integer greater than, equal to,
|
| 66 | or less than zero, accordingly as the possibly null-terminated
|
| 67 | array pointed to by s1 is greater than, equal to, or less than
|
| 68 | the possibly null-terminated array pointed to by s2.
|
| 69 | **/
|
| 70 | int strncmp(const char *s1, const char *s2, size_t n)
|
| 71 | {
|
| 72 | return (int)AsciiStrnCmp( s1, s2, n);
|
| 73 | }
|
| 74 |
|
| 75 | /** The strxfrm function transforms the string pointed to by Src and places the
|
| 76 | resulting string into the array pointed to by Dest. The transformation is
|
| 77 | such that if the strcmp function is applied to two transformed strings, it
|
| 78 | returns a value greater than, equal to, or less than zero, corresponding to
|
| 79 | the result of the strcoll function applied to the same two original
|
| 80 | strings. No more than Len characters are placed into the resulting array
|
| 81 | pointed to by Dest, including the terminating null character. If Len is zero,
|
| 82 | Dest is permitted to be a null pointer. If copying takes place between
|
| 83 | objects that overlap, the behavior is undefined.
|
| 84 |
|
| 85 | @return The strxfrm function returns the length of the transformed string
|
| 86 | (not including the terminating null character). If the value
|
| 87 | returned is Len or more, the contents of the array pointed to by Dest
|
| 88 | are indeterminate.
|
| 89 | **/
|
| 90 | size_t strxfrm(char * __restrict Dest, const char * __restrict Src, size_t Len)
|
| 91 | {
|
| 92 | size_t srclen, copysize;
|
| 93 |
|
| 94 | /*
|
| 95 | * Since locales are unimplemented, this is just a copy.
|
| 96 | */
|
| 97 | srclen = strlen(Src);
|
| 98 | if (Len != 0) {
|
| 99 | copysize = srclen < Len ? srclen : Len - 1;
|
| 100 | (void)memcpy(Dest, Src, copysize);
|
| 101 | Dest[copysize] = 0;
|
| 102 | }
|
| 103 | return (srclen);
|
| 104 | }
|
| 105 |
|
| 106 | /** Case agnostic string comparison for NetBSD compatibility. **/
|
| 107 | int
|
| 108 | strcasecmp(const char *s1, const char *s2)
|
| 109 | {
|
| 110 | return (int)AsciiStriCmp( s1, s2);
|
| 111 | }
|