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