Home | History | Annotate | Download | only in String
      1 /** @file
      2     Miscellaneous 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  <sys/EfiCdefs.h>
     14 
     15 #include  <Uefi.h>
     16 #include  <Library/BaseLib.h>
     17 #include  <Library/BaseMemoryLib.h>
     18 #include  <Library/PcdLib.h>
     19 #include  <Library/PrintLib.h>
     20 
     21 #include  <LibConfig.h>
     22 
     23 #include  <errno.h>
     24 #include  <limits.h>
     25 #include  <string.h>
     26 
     27 extern char *sys_errlist[];
     28 
     29 /** The memset function copies the value of c (converted to an unsigned char)
     30     into each of the first n characters of the object pointed to by s.
     31 
     32     @return   The memset function returns the value of s.
     33 **/
     34 void *
     35 memset(void *s, int c, size_t n)
     36 {
     37   return SetMem( s, (UINTN)n, (UINT8)c);
     38 }
     39 
     40 int
     41 strerror_r(int errnum, char *buf, size_t buflen)
     42 {
     43   const char   *estring;
     44   INTN          i;
     45   int           retval = 0;
     46 
     47   if( (errnum < 0) || (errnum >= EMAXERRORVAL)) {
     48     (void) AsciiSPrint( buf, ASCII_STRING_MAX, "Unknown Error: %d.", errnum);
     49     retval = EINVAL;
     50   }
     51   else {
     52     estring = sys_errlist[errnum];
     53     for( i = buflen; i > 0; --i) {
     54       if( (*buf++ = *estring++) == '\0') {
     55         break;
     56       }
     57     }
     58     if(i == 0) {
     59       retval = ERANGE;
     60     }
     61   }
     62   return retval;
     63 }
     64 
     65 /** The strerror function maps the number in errnum to a message string.
     66     Typically, the values for errnum come from errno, but strerror shall map
     67     any value of type int to a message.
     68 
     69     The implementation shall behave as if no library function calls the
     70     strerror function.
     71 
     72     @return   The strerror function returns a pointer to the string, the
     73               contents of which are locale specific.  The array pointed to
     74               shall not be modified by the program, but may be overwritten by
     75               a subsequent call to the strerror function.
     76 **/
     77 char *
     78 strerror(int errnum)
     79 {
     80   static char errorbuf[ASCII_STRING_MAX];
     81   int         status;
     82 
     83   status = strerror_r(errnum, errorbuf, sizeof(errorbuf));
     84   if(status != 0) {
     85     errno = status;
     86   }
     87   return errorbuf;
     88 }
     89 
     90 /** The strlen function computes the length of the string pointed to by s.
     91 
     92     @return   The strlen function returns the number of characters that
     93               precede the terminating null character.
     94 **/
     95 size_t
     96 strlen(const char *s)
     97 {
     98   return (size_t)AsciiStrLen( s);
     99 }
    100