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