Home | History | Annotate | Download | only in String
      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 }
    112