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 | }
|
---|