diff options
Diffstat (limited to 'StdLib/LibC/String/Misc.c')
-rw-r--r-- | StdLib/LibC/String/Misc.c | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/StdLib/LibC/String/Misc.c b/StdLib/LibC/String/Misc.c new file mode 100644 index 0000000000..99328252ed --- /dev/null +++ b/StdLib/LibC/String/Misc.c @@ -0,0 +1,99 @@ +/** @file
+ Miscellaneous Functions for <string.h>.
+
+ Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License that accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+**/
+//#include <sys/EfiCdefs.h>
+
+#include <Uefi.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/PcdLib.h>
+#include <Library/PrintLib.h>
+
+#include <LibConfig.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <string.h>
+
+extern char *sys_errlist[];
+
+/** The memset function copies the value of c (converted to an unsigned char)
+ into each of the first n characters of the object pointed to by s.
+
+ @return The memset function returns the value of s.
+**/
+void *
+memset(void *s, int c, size_t n)
+{
+ return SetMem( s, (UINTN)n, (UINT8)c);
+}
+
+int
+strerror_r(int errnum, char *buf, size_t buflen)
+{
+ const char *estring;
+ INTN i;
+ int retval = 0;
+
+ if( (errnum < 0) || (errnum >= EMAXERRORVAL)) {
+ (void) AsciiSPrint( buf, ASCII_STRING_MAX, "Unknown Error: %d.", errnum);
+ retval = EINVAL;
+ }
+ else {
+ estring = sys_errlist[errnum];
+ for( i = buflen; i > 0; --i) {
+ if( (*buf++ = *estring++) == '\0') {
+ break;
+ }
+ }
+ if(i == 0) {
+ retval = ERANGE;
+ }
+ }
+ return retval;
+}
+
+/** The strerror function maps the number in errnum to a message string.
+ Typically, the values for errnum come from errno, but strerror shall map
+ any value of type int to a message.
+
+ The implementation shall behave as if no library function calls the
+ strerror function.
+
+ @return The strerror function returns a pointer to the string, the
+ contents of which are locale specific. The array pointed to
+ shall not be modified by the program, but may be overwritten by
+ a subsequent call to the strerror function.
+**/
+char *
+strerror(int errnum)
+{
+ static char errorbuf[ASCII_STRING_MAX];
+ int status;
+
+ status = strerror_r(errnum, errorbuf, sizeof(errorbuf));
+ if(status != 0) {
+ errno = status;
+ }
+ return errorbuf;
+}
+
+/** The strlen function computes the length of the string pointed to by s.
+
+ @return The strlen function returns the number of characters that
+ precede the terminating null character.
+**/
+size_t
+strlen(const char *s)
+{
+ return (size_t)AsciiStrLen( s);
+}
|