Provides string functions, linked list functions, math functions, synchronization\r
functions, file path functions, and CPU architecture-specific functions.\r
\r
-Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
/**\r
Returns the length of a Null-terminated Unicode string.\r
\r
+ This function is similar as strlen_s defined in C11.\r
+\r
If String is not aligned on a 16-bit boundary, then ASSERT().\r
\r
@param String A pointer to a Null-terminated Unicode string.\r
IN UINTN MaxSize\r
);\r
\r
+/**\r
+ Returns the size of a Null-terminated Unicode string in bytes, including the\r
+ Null terminator.\r
+\r
+ This function returns the size of the Null-terminated Unicode string\r
+ specified by String in bytes, including the Null terminator.\r
+\r
+ If String is not aligned on a 16-bit boundary, then ASSERT().\r
+\r
+ @param String A pointer to a Null-terminated Unicode string.\r
+ @param MaxSize The maximum number of Destination Unicode\r
+ char, including the Null terminator.\r
+\r
+ @retval 0 If String is NULL.\r
+ @retval (sizeof (CHAR16) * (MaxSize + 1))\r
+ If there is no Null terminator in the first MaxSize characters of\r
+ String.\r
+ @return The size of the Null-terminated Unicode string in bytes, including\r
+ the Null terminator.\r
+\r
+**/\r
+UINTN\r
+EFIAPI\r
+StrnSizeS (\r
+ IN CONST CHAR16 *String,\r
+ IN UINTN MaxSize\r
+ );\r
+\r
/**\r
Copies the string pointed to by Source (including the terminating null char)\r
to the array pointed to by Destination.\r
\r
+ This function is similar as strcpy_s defined in C11.\r
+\r
If Destination is not aligned on a 16-bit boundary, then ASSERT().\r
If Source is not aligned on a 16-bit boundary, then ASSERT().\r
If an error would be returned, then the function will also ASSERT().\r
\r
+ If an error is returned, then the Destination is unmodified.\r
+\r
@param Destination A pointer to a Null-terminated Unicode string.\r
@param DestMax The maximum number of Destination Unicode\r
char, including terminating null char.\r
Source to the array pointed to by Destination. If no null char is copied from\r
Source, then Destination[Length] is always set to null.\r
\r
+ This function is similar as strncpy_s defined in C11.\r
+\r
If Length > 0 and Destination is not aligned on a 16-bit boundary, then ASSERT().\r
If Length > 0 and Source is not aligned on a 16-bit boundary, then ASSERT().\r
If an error would be returned, then the function will also ASSERT().\r
\r
+ If an error is returned, then the Destination is unmodified.\r
+\r
@param Destination A pointer to a Null-terminated Unicode string.\r
@param DestMax The maximum number of Destination Unicode\r
char, including terminating null char.\r
Appends a copy of the string pointed to by Source (including the terminating\r
null char) to the end of the string pointed to by Destination.\r
\r
+ This function is similar as strcat_s defined in C11.\r
+\r
If Destination is not aligned on a 16-bit boundary, then ASSERT().\r
If Source is not aligned on a 16-bit boundary, then ASSERT().\r
If an error would be returned, then the function will also ASSERT().\r
\r
+ If an error is returned, then the Destination is unmodified.\r
+\r
@param Destination A pointer to a Null-terminated Unicode string.\r
@param DestMax The maximum number of Destination Unicode\r
char, including terminating null char.\r
copied from Source, then Destination[StrLen(Destination) + Length] is always\r
set to null.\r
\r
+ This function is similar as strncat_s defined in C11.\r
+\r
If Destination is not aligned on a 16-bit boundary, then ASSERT().\r
If Source is not aligned on a 16-bit boundary, then ASSERT().\r
If an error would be returned, then the function will also ASSERT().\r
\r
+ If an error is returned, then the Destination is unmodified.\r
+\r
@param Destination A pointer to a Null-terminated Unicode string.\r
@param DestMax The maximum number of Destination Unicode\r
char, including terminating null char.\r
IN UINTN Length\r
);\r
\r
+/**\r
+ Convert a Null-terminated Unicode decimal string to a value of type UINTN.\r
+\r
+ This function outputs a value of type UINTN by interpreting the contents of\r
+ the Unicode string specified by String as a decimal number. The format of the\r
+ input Unicode string String is:\r
+\r
+ [spaces] [decimal digits].\r
+\r
+ The valid decimal digit character is in the range [0-9]. The function will\r
+ ignore the pad space, which includes spaces or tab characters, before\r
+ [decimal digits]. The running zero in the beginning of [decimal digits] will\r
+ be ignored. Then, the function stops at the first character that is a not a\r
+ valid decimal character or a Null-terminator, whichever one comes first.\r
+\r
+ If String is NULL, then ASSERT().\r
+ If Data is NULL, then ASSERT().\r
+ If String is not aligned in a 16-bit boundary, then ASSERT().\r
+ If PcdMaximumUnicodeStringLength is not zero, and String contains more than\r
+ PcdMaximumUnicodeStringLength Unicode characters, not including the\r
+ Null-terminator, then ASSERT().\r
+\r
+ If String has no valid decimal digits in the above format, then 0 is stored\r
+ at the location pointed to by Data.\r
+ If the number represented by String exceeds the range defined by UINTN, then\r
+ MAX_UINTN is stored at the location pointed to by Data.\r
+\r
+ If EndPointer is not NULL, a pointer to the character that stopped the scan\r
+ is stored at the location pointed to by EndPointer. If String has no valid\r
+ decimal digits right after the optional pad spaces, the value of String is\r
+ stored at the location pointed to by EndPointer.\r
+\r
+ @param String Pointer to a Null-terminated Unicode string.\r
+ @param EndPointer Pointer to character that stops scan.\r
+ @param Data Pointer to the converted value.\r
+\r
+ @retval RETURN_SUCCESS Value is translated from String.\r
+ @retval RETURN_INVALID_PARAMETER If String is NULL.\r
+ If Data is NULL.\r
+ If PcdMaximumUnicodeStringLength is not\r
+ zero, and String contains more than\r
+ PcdMaximumUnicodeStringLength Unicode\r
+ characters, not including the\r
+ Null-terminator.\r
+ @retval RETURN_UNSUPPORTED If the number represented by String exceeds\r
+ the range defined by UINTN.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+StrDecimalToUintnS (\r
+ IN CONST CHAR16 *String,\r
+ OUT CHAR16 **EndPointer, OPTIONAL\r
+ OUT UINTN *Data\r
+ );\r
+\r
+/**\r
+ Convert a Null-terminated Unicode decimal string to a value of type UINT64.\r
+\r
+ This function outputs a value of type UINT64 by interpreting the contents of\r
+ the Unicode string specified by String as a decimal number. The format of the\r
+ input Unicode string String is:\r
+\r
+ [spaces] [decimal digits].\r
+\r
+ The valid decimal digit character is in the range [0-9]. The function will\r
+ ignore the pad space, which includes spaces or tab characters, before\r
+ [decimal digits]. The running zero in the beginning of [decimal digits] will\r
+ be ignored. Then, the function stops at the first character that is a not a\r
+ valid decimal character or a Null-terminator, whichever one comes first.\r
+\r
+ If String is NULL, then ASSERT().\r
+ If Data is NULL, then ASSERT().\r
+ If String is not aligned in a 16-bit boundary, then ASSERT().\r
+ If PcdMaximumUnicodeStringLength is not zero, and String contains more than\r
+ PcdMaximumUnicodeStringLength Unicode characters, not including the\r
+ Null-terminator, then ASSERT().\r
+\r
+ If String has no valid decimal digits in the above format, then 0 is stored\r
+ at the location pointed to by Data.\r
+ If the number represented by String exceeds the range defined by UINT64, then\r
+ MAX_UINT64 is stored at the location pointed to by Data.\r
+\r
+ If EndPointer is not NULL, a pointer to the character that stopped the scan\r
+ is stored at the location pointed to by EndPointer. If String has no valid\r
+ decimal digits right after the optional pad spaces, the value of String is\r
+ stored at the location pointed to by EndPointer.\r
+\r
+ @param String Pointer to a Null-terminated Unicode string.\r
+ @param EndPointer Pointer to character that stops scan.\r
+ @param Data Pointer to the converted value.\r
+\r
+ @retval RETURN_SUCCESS Value is translated from String.\r
+ @retval RETURN_INVALID_PARAMETER If String is NULL.\r
+ If Data is NULL.\r
+ If PcdMaximumUnicodeStringLength is not\r
+ zero, and String contains more than\r
+ PcdMaximumUnicodeStringLength Unicode\r
+ characters, not including the\r
+ Null-terminator.\r
+ @retval RETURN_UNSUPPORTED If the number represented by String exceeds\r
+ the range defined by UINT64.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+StrDecimalToUint64S (\r
+ IN CONST CHAR16 *String,\r
+ OUT CHAR16 **EndPointer, OPTIONAL\r
+ OUT UINT64 *Data\r
+ );\r
+\r
+/**\r
+ Convert a Null-terminated Unicode hexadecimal string to a value of type\r
+ UINTN.\r
+\r
+ This function outputs a value of type UINTN by interpreting the contents of\r
+ the Unicode string specified by String as a hexadecimal number. The format of\r
+ the input Unicode string String is:\r
+\r
+ [spaces][zeros][x][hexadecimal digits].\r
+\r
+ The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].\r
+ The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix.\r
+ If "x" appears in the input string, it must be prefixed with at least one 0.\r
+ The function will ignore the pad space, which includes spaces or tab\r
+ characters, before [zeros], [x] or [hexadecimal digit]. The running zero\r
+ before [x] or [hexadecimal digit] will be ignored. Then, the decoding starts\r
+ after [x] or the first valid hexadecimal digit. Then, the function stops at\r
+ the first character that is a not a valid hexadecimal character or NULL,\r
+ whichever one comes first.\r
+\r
+ If String is NULL, then ASSERT().\r
+ If Data is NULL, then ASSERT().\r
+ If String is not aligned in a 16-bit boundary, then ASSERT().\r
+ If PcdMaximumUnicodeStringLength is not zero, and String contains more than\r
+ PcdMaximumUnicodeStringLength Unicode characters, not including the\r
+ Null-terminator, then ASSERT().\r
+\r
+ If String has no valid hexadecimal digits in the above format, then 0 is\r
+ stored at the location pointed to by Data.\r
+ If the number represented by String exceeds the range defined by UINTN, then\r
+ MAX_UINTN is stored at the location pointed to by Data.\r
+\r
+ If EndPointer is not NULL, a pointer to the character that stopped the scan\r
+ is stored at the location pointed to by EndPointer. If String has no valid\r
+ hexadecimal digits right after the optional pad spaces, the value of String\r
+ is stored at the location pointed to by EndPointer.\r
+\r
+ @param String Pointer to a Null-terminated Unicode string.\r
+ @param EndPointer Pointer to character that stops scan.\r
+ @param Data Pointer to the converted value.\r
+\r
+ @retval RETURN_SUCCESS Value is translated from String.\r
+ @retval RETURN_INVALID_PARAMETER If String is NULL.\r
+ If Data is NULL.\r
+ If PcdMaximumUnicodeStringLength is not\r
+ zero, and String contains more than\r
+ PcdMaximumUnicodeStringLength Unicode\r
+ characters, not including the\r
+ Null-terminator.\r
+ @retval RETURN_UNSUPPORTED If the number represented by String exceeds\r
+ the range defined by UINTN.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+StrHexToUintnS (\r
+ IN CONST CHAR16 *String,\r
+ OUT CHAR16 **EndPointer, OPTIONAL\r
+ OUT UINTN *Data\r
+ );\r
+\r
+/**\r
+ Convert a Null-terminated Unicode hexadecimal string to a value of type\r
+ UINT64.\r
+\r
+ This function outputs a value of type UINT64 by interpreting the contents of\r
+ the Unicode string specified by String as a hexadecimal number. The format of\r
+ the input Unicode string String is:\r
+\r
+ [spaces][zeros][x][hexadecimal digits].\r
+\r
+ The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].\r
+ The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix.\r
+ If "x" appears in the input string, it must be prefixed with at least one 0.\r
+ The function will ignore the pad space, which includes spaces or tab\r
+ characters, before [zeros], [x] or [hexadecimal digit]. The running zero\r
+ before [x] or [hexadecimal digit] will be ignored. Then, the decoding starts\r
+ after [x] or the first valid hexadecimal digit. Then, the function stops at\r
+ the first character that is a not a valid hexadecimal character or NULL,\r
+ whichever one comes first.\r
+\r
+ If String is NULL, then ASSERT().\r
+ If Data is NULL, then ASSERT().\r
+ If String is not aligned in a 16-bit boundary, then ASSERT().\r
+ If PcdMaximumUnicodeStringLength is not zero, and String contains more than\r
+ PcdMaximumUnicodeStringLength Unicode characters, not including the\r
+ Null-terminator, then ASSERT().\r
+\r
+ If String has no valid hexadecimal digits in the above format, then 0 is\r
+ stored at the location pointed to by Data.\r
+ If the number represented by String exceeds the range defined by UINT64, then\r
+ MAX_UINT64 is stored at the location pointed to by Data.\r
+\r
+ If EndPointer is not NULL, a pointer to the character that stopped the scan\r
+ is stored at the location pointed to by EndPointer. If String has no valid\r
+ hexadecimal digits right after the optional pad spaces, the value of String\r
+ is stored at the location pointed to by EndPointer.\r
+\r
+ @param String Pointer to a Null-terminated Unicode string.\r
+ @param EndPointer Pointer to character that stops scan.\r
+ @param Data Pointer to the converted value.\r
+\r
+ @retval RETURN_SUCCESS Value is translated from String.\r
+ @retval RETURN_INVALID_PARAMETER If String is NULL.\r
+ If Data is NULL.\r
+ If PcdMaximumUnicodeStringLength is not\r
+ zero, and String contains more than\r
+ PcdMaximumUnicodeStringLength Unicode\r
+ characters, not including the\r
+ Null-terminator.\r
+ @retval RETURN_UNSUPPORTED If the number represented by String exceeds\r
+ the range defined by UINT64.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+StrHexToUint64S (\r
+ IN CONST CHAR16 *String,\r
+ OUT CHAR16 **EndPointer, OPTIONAL\r
+ OUT UINT64 *Data\r
+ );\r
+\r
/**\r
Returns the length of a Null-terminated Ascii string.\r
\r
+ This function is similar as strlen_s defined in C11.\r
+\r
@param String A pointer to a Null-terminated Ascii string.\r
@param MaxSize The maximum number of Destination Ascii\r
char, including terminating null char.\r
IN UINTN MaxSize\r
);\r
\r
+/**\r
+ Returns the size of a Null-terminated Ascii string in bytes, including the\r
+ Null terminator.\r
+\r
+ This function returns the size of the Null-terminated Ascii string specified\r
+ by String in bytes, including the Null terminator.\r
+\r
+ @param String A pointer to a Null-terminated Ascii string.\r
+ @param MaxSize The maximum number of Destination Ascii\r
+ char, including the Null terminator.\r
+\r
+ @retval 0 If String is NULL.\r
+ @retval (sizeof (CHAR8) * (MaxSize + 1))\r
+ If there is no Null terminator in the first MaxSize characters of\r
+ String.\r
+ @return The size of the Null-terminated Ascii string in bytes, including the\r
+ Null terminator.\r
+\r
+**/\r
+UINTN\r
+EFIAPI\r
+AsciiStrnSizeS (\r
+ IN CONST CHAR8 *String,\r
+ IN UINTN MaxSize\r
+ );\r
+\r
/**\r
Copies the string pointed to by Source (including the terminating null char)\r
to the array pointed to by Destination.\r
\r
+ This function is similar as strcpy_s defined in C11.\r
+\r
If an error would be returned, then the function will also ASSERT().\r
\r
+ If an error is returned, then the Destination is unmodified.\r
+\r
@param Destination A pointer to a Null-terminated Ascii string.\r
@param DestMax The maximum number of Destination Ascii\r
char, including terminating null char.\r
Source to the array pointed to by Destination. If no null char is copied from\r
Source, then Destination[Length] is always set to null.\r
\r
+ This function is similar as strncpy_s defined in C11.\r
+\r
If an error would be returned, then the function will also ASSERT().\r
\r
+ If an error is returned, then the Destination is unmodified.\r
+\r
@param Destination A pointer to a Null-terminated Ascii string.\r
@param DestMax The maximum number of Destination Ascii\r
char, including terminating null char.\r
Appends a copy of the string pointed to by Source (including the terminating\r
null char) to the end of the string pointed to by Destination.\r
\r
+ This function is similar as strcat_s defined in C11.\r
+\r
If an error would be returned, then the function will also ASSERT().\r
\r
+ If an error is returned, then the Destination is unmodified.\r
+\r
@param Destination A pointer to a Null-terminated Ascii string.\r
@param DestMax The maximum number of Destination Ascii\r
char, including terminating null char.\r
copied from Source, then Destination[StrLen(Destination) + Length] is always\r
set to null.\r
\r
+ This function is similar as strncat_s defined in C11.\r
+\r
If an error would be returned, then the function will also ASSERT().\r
\r
+ If an error is returned, then the Destination is unmodified.\r
+\r
@param Destination A pointer to a Null-terminated Ascii string.\r
@param DestMax The maximum number of Destination Ascii\r
char, including terminating null char.\r
IN UINTN Length\r
);\r
\r
+/**\r
+ Convert a Null-terminated Ascii decimal string to a value of type UINTN.\r
+\r
+ This function outputs a value of type UINTN by interpreting the contents of\r
+ the Ascii string specified by String as a decimal number. The format of the\r
+ input Ascii string String is:\r
+\r
+ [spaces] [decimal digits].\r
+\r
+ The valid decimal digit character is in the range [0-9]. The function will\r
+ ignore the pad space, which includes spaces or tab characters, before\r
+ [decimal digits]. The running zero in the beginning of [decimal digits] will\r
+ be ignored. Then, the function stops at the first character that is a not a\r
+ valid decimal character or a Null-terminator, whichever one comes first.\r
+\r
+ If String is NULL, then ASSERT().\r
+ If Data is NULL, then ASSERT().\r
+ If PcdMaximumAsciiStringLength is not zero, and String contains more than\r
+ PcdMaximumAsciiStringLength Ascii characters, not including the\r
+ Null-terminator, then ASSERT().\r
+\r
+ If String has no valid decimal digits in the above format, then 0 is stored\r
+ at the location pointed to by Data.\r
+ If the number represented by String exceeds the range defined by UINTN, then\r
+ MAX_UINTN is stored at the location pointed to by Data.\r
+\r
+ If EndPointer is not NULL, a pointer to the character that stopped the scan\r
+ is stored at the location pointed to by EndPointer. If String has no valid\r
+ decimal digits right after the optional pad spaces, the value of String is\r
+ stored at the location pointed to by EndPointer.\r
+\r
+ @param String Pointer to a Null-terminated Ascii string.\r
+ @param EndPointer Pointer to character that stops scan.\r
+ @param Data Pointer to the converted value.\r
+\r
+ @retval RETURN_SUCCESS Value is translated from String.\r
+ @retval RETURN_INVALID_PARAMETER If String is NULL.\r
+ If Data is NULL.\r
+ If PcdMaximumAsciiStringLength is not zero,\r
+ and String contains more than\r
+ PcdMaximumAsciiStringLength Ascii\r
+ characters, not including the\r
+ Null-terminator.\r
+ @retval RETURN_UNSUPPORTED If the number represented by String exceeds\r
+ the range defined by UINTN.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+AsciiStrDecimalToUintnS (\r
+ IN CONST CHAR8 *String,\r
+ OUT CHAR8 **EndPointer, OPTIONAL\r
+ OUT UINTN *Data\r
+ );\r
+\r
+/**\r
+ Convert a Null-terminated Ascii decimal string to a value of type UINT64.\r
+\r
+ This function outputs a value of type UINT64 by interpreting the contents of\r
+ the Ascii string specified by String as a decimal number. The format of the\r
+ input Ascii string String is:\r
+\r
+ [spaces] [decimal digits].\r
+\r
+ The valid decimal digit character is in the range [0-9]. The function will\r
+ ignore the pad space, which includes spaces or tab characters, before\r
+ [decimal digits]. The running zero in the beginning of [decimal digits] will\r
+ be ignored. Then, the function stops at the first character that is a not a\r
+ valid decimal character or a Null-terminator, whichever one comes first.\r
+\r
+ If String is NULL, then ASSERT().\r
+ If Data is NULL, then ASSERT().\r
+ If PcdMaximumAsciiStringLength is not zero, and String contains more than\r
+ PcdMaximumAsciiStringLength Ascii characters, not including the\r
+ Null-terminator, then ASSERT().\r
+\r
+ If String has no valid decimal digits in the above format, then 0 is stored\r
+ at the location pointed to by Data.\r
+ If the number represented by String exceeds the range defined by UINT64, then\r
+ MAX_UINT64 is stored at the location pointed to by Data.\r
+\r
+ If EndPointer is not NULL, a pointer to the character that stopped the scan\r
+ is stored at the location pointed to by EndPointer. If String has no valid\r
+ decimal digits right after the optional pad spaces, the value of String is\r
+ stored at the location pointed to by EndPointer.\r
+\r
+ @param String Pointer to a Null-terminated Ascii string.\r
+ @param EndPointer Pointer to character that stops scan.\r
+ @param Data Pointer to the converted value.\r
+\r
+ @retval RETURN_SUCCESS Value is translated from String.\r
+ @retval RETURN_INVALID_PARAMETER If String is NULL.\r
+ If Data is NULL.\r
+ If PcdMaximumAsciiStringLength is not zero,\r
+ and String contains more than\r
+ PcdMaximumAsciiStringLength Ascii\r
+ characters, not including the\r
+ Null-terminator.\r
+ @retval RETURN_UNSUPPORTED If the number represented by String exceeds\r
+ the range defined by UINT64.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+AsciiStrDecimalToUint64S (\r
+ IN CONST CHAR8 *String,\r
+ OUT CHAR8 **EndPointer, OPTIONAL\r
+ OUT UINT64 *Data\r
+ );\r
+\r
+/**\r
+ Convert a Null-terminated Ascii hexadecimal string to a value of type UINTN.\r
+\r
+ This function outputs a value of type UINTN by interpreting the contents of\r
+ the Ascii string specified by String as a hexadecimal number. The format of\r
+ the input Ascii string String is:\r
+\r
+ [spaces][zeros][x][hexadecimal digits].\r
+\r
+ The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].\r
+ The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. If\r
+ "x" appears in the input string, it must be prefixed with at least one 0. The\r
+ function will ignore the pad space, which includes spaces or tab characters,\r
+ before [zeros], [x] or [hexadecimal digits]. The running zero before [x] or\r
+ [hexadecimal digits] will be ignored. Then, the decoding starts after [x] or\r
+ the first valid hexadecimal digit. Then, the function stops at the first\r
+ character that is a not a valid hexadecimal character or Null-terminator,\r
+ whichever on comes first.\r
+\r
+ If String is NULL, then ASSERT().\r
+ If Data is NULL, then ASSERT().\r
+ If PcdMaximumAsciiStringLength is not zero, and String contains more than\r
+ PcdMaximumAsciiStringLength Ascii characters, not including the\r
+ Null-terminator, then ASSERT().\r
+\r
+ If String has no valid hexadecimal digits in the above format, then 0 is\r
+ stored at the location pointed to by Data.\r
+ If the number represented by String exceeds the range defined by UINTN, then\r
+ MAX_UINTN is stored at the location pointed to by Data.\r
+\r
+ If EndPointer is not NULL, a pointer to the character that stopped the scan\r
+ is stored at the location pointed to by EndPointer. If String has no valid\r
+ hexadecimal digits right after the optional pad spaces, the value of String\r
+ is stored at the location pointed to by EndPointer.\r
+\r
+ @param String Pointer to a Null-terminated Ascii string.\r
+ @param EndPointer Pointer to character that stops scan.\r
+ @param Data Pointer to the converted value.\r
+\r
+ @retval RETURN_SUCCESS Value is translated from String.\r
+ @retval RETURN_INVALID_PARAMETER If String is NULL.\r
+ If Data is NULL.\r
+ If PcdMaximumAsciiStringLength is not zero,\r
+ and String contains more than\r
+ PcdMaximumAsciiStringLength Ascii\r
+ characters, not including the\r
+ Null-terminator.\r
+ @retval RETURN_UNSUPPORTED If the number represented by String exceeds\r
+ the range defined by UINTN.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+AsciiStrHexToUintnS (\r
+ IN CONST CHAR8 *String,\r
+ OUT CHAR8 **EndPointer, OPTIONAL\r
+ OUT UINTN *Data\r
+ );\r
+\r
+/**\r
+ Convert a Null-terminated Ascii hexadecimal string to a value of type UINT64.\r
+\r
+ This function outputs a value of type UINT64 by interpreting the contents of\r
+ the Ascii string specified by String as a hexadecimal number. The format of\r
+ the input Ascii string String is:\r
+\r
+ [spaces][zeros][x][hexadecimal digits].\r
+\r
+ The valid hexadecimal digit character is in the range [0-9], [a-f] and [A-F].\r
+ The prefix "0x" is optional. Both "x" and "X" is allowed in "0x" prefix. If\r
+ "x" appears in the input string, it must be prefixed with at least one 0. The\r
+ function will ignore the pad space, which includes spaces or tab characters,\r
+ before [zeros], [x] or [hexadecimal digits]. The running zero before [x] or\r
+ [hexadecimal digits] will be ignored. Then, the decoding starts after [x] or\r
+ the first valid hexadecimal digit. Then, the function stops at the first\r
+ character that is a not a valid hexadecimal character or Null-terminator,\r
+ whichever on comes first.\r
+\r
+ If String is NULL, then ASSERT().\r
+ If Data is NULL, then ASSERT().\r
+ If PcdMaximumAsciiStringLength is not zero, and String contains more than\r
+ PcdMaximumAsciiStringLength Ascii characters, not including the\r
+ Null-terminator, then ASSERT().\r
+\r
+ If String has no valid hexadecimal digits in the above format, then 0 is\r
+ stored at the location pointed to by Data.\r
+ If the number represented by String exceeds the range defined by UINT64, then\r
+ MAX_UINT64 is stored at the location pointed to by Data.\r
+\r
+ If EndPointer is not NULL, a pointer to the character that stopped the scan\r
+ is stored at the location pointed to by EndPointer. If String has no valid\r
+ hexadecimal digits right after the optional pad spaces, the value of String\r
+ is stored at the location pointed to by EndPointer.\r
+\r
+ @param String Pointer to a Null-terminated Ascii string.\r
+ @param EndPointer Pointer to character that stops scan.\r
+ @param Data Pointer to the converted value.\r
+\r
+ @retval RETURN_SUCCESS Value is translated from String.\r
+ @retval RETURN_INVALID_PARAMETER If String is NULL.\r
+ If Data is NULL.\r
+ If PcdMaximumAsciiStringLength is not zero,\r
+ and String contains more than\r
+ PcdMaximumAsciiStringLength Ascii\r
+ characters, not including the\r
+ Null-terminator.\r
+ @retval RETURN_UNSUPPORTED If the number represented by String exceeds\r
+ the range defined by UINT64.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+AsciiStrHexToUint64S (\r
+ IN CONST CHAR8 *String,\r
+ OUT CHAR8 **EndPointer, OPTIONAL\r
+ OUT UINT64 *Data\r
+ );\r
+\r
\r
#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
\r
If String has no pad spaces or valid decimal digits,\r
then 0 is returned.\r
If the number represented by String overflows according\r
- to the range defined by UINTN, then ASSERT().\r
+ to the range defined by UINTN, then MAX_UINTN is returned.\r
\r
If PcdMaximumUnicodeStringLength is not zero, and String contains\r
more than PcdMaximumUnicodeStringLength Unicode characters not including\r
If String has no pad spaces or valid decimal digits,\r
then 0 is returned.\r
If the number represented by String overflows according\r
- to the range defined by UINT64, then ASSERT().\r
+ to the range defined by UINT64, then MAX_UINT64 is returned.\r
\r
If PcdMaximumUnicodeStringLength is not zero, and String contains\r
more than PcdMaximumUnicodeStringLength Unicode characters not including\r
If String has no leading pad spaces, leading zeros or valid hexadecimal digits,\r
then zero is returned.\r
If the number represented by String overflows according to the range defined by\r
- UINTN, then ASSERT().\r
+ UINTN, then MAX_UINTN is returned.\r
\r
If PcdMaximumUnicodeStringLength is not zero, and String contains more than\r
PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator,\r
If String has no leading pad spaces, leading zeros or valid hexadecimal digits,\r
then zero is returned.\r
If the number represented by String overflows according to the range defined by\r
- UINT64, then ASSERT().\r
+ UINT64, then MAX_UINT64 is returned.\r
\r
If PcdMaximumUnicodeStringLength is not zero, and String contains more than\r
PcdMaximumUnicodeStringLength Unicode characters not including the Null-terminator,\r
IN CONST CHAR16 *String\r
);\r
\r
+#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
+\r
/**\r
+ [ATTENTION] This function is deprecated for security reason.\r
+\r
Convert a Null-terminated Unicode string to a Null-terminated\r
ASCII string and returns the ASCII string.\r
\r
OUT CHAR8 *Destination\r
);\r
\r
+#endif\r
+\r
+/**\r
+ Convert a Null-terminated Unicode string to a Null-terminated\r
+ ASCII string.\r
+\r
+ This function is similar to AsciiStrCpyS.\r
+\r
+ This function converts the content of the Unicode string Source\r
+ to the ASCII string Destination by copying the lower 8 bits of\r
+ each Unicode character. The function terminates the ASCII string\r
+ Destination by appending a Null-terminator character at the end.\r
+\r
+ The caller is responsible to make sure Destination points to a buffer with size\r
+ equal or greater than ((StrLen (Source) + 1) * sizeof (CHAR8)) in bytes.\r
+\r
+ If any Unicode characters in Source contain non-zero value in\r
+ the upper 8 bits, then ASSERT().\r
+\r
+ If Source is not aligned on a 16-bit boundary, then ASSERT().\r
+ If an error would be returned, then the function will also ASSERT().\r
+\r
+ If an error is returned, then the Destination is unmodified.\r
+\r
+ @param Source The pointer to a Null-terminated Unicode string.\r
+ @param Destination The pointer to a Null-terminated ASCII string.\r
+ @param DestMax The maximum number of Destination Ascii\r
+ char, including terminating null char.\r
+\r
+ @retval RETURN_SUCCESS String is converted.\r
+ @retval RETURN_BUFFER_TOO_SMALL If DestMax is NOT greater than StrLen(Source).\r
+ @retval RETURN_INVALID_PARAMETER If Destination is NULL.\r
+ If Source is NULL.\r
+ If PcdMaximumAsciiStringLength is not zero,\r
+ and DestMax is greater than\r
+ PcdMaximumAsciiStringLength.\r
+ If PcdMaximumUnicodeStringLength is not zero,\r
+ and DestMax is greater than\r
+ PcdMaximumUnicodeStringLength.\r
+ If DestMax is 0.\r
+ @retval RETURN_ACCESS_DENIED If Source and Destination overlap.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+UnicodeStrToAsciiStrS (\r
+ IN CONST CHAR16 *Source,\r
+ OUT CHAR8 *Destination,\r
+ IN UINTN DestMax\r
+ );\r
+\r
+/**\r
+ Convert not more than Length successive characters from a Null-terminated\r
+ Unicode string to a Null-terminated Ascii string. If no null char is copied\r
+ from Source, then Destination[Length] is always set to null.\r
+\r
+ This function converts not more than Length successive characters from the\r
+ Unicode string Source to the Ascii string Destination by copying the lower 8\r
+ bits of each Unicode character. The function terminates the Ascii string\r
+ Destination by appending a Null-terminator character at the end.\r
+\r
+ The caller is responsible to make sure Destination points to a buffer with size\r
+ equal or greater than ((StrLen (Source) + 1) * sizeof (CHAR8)) in bytes.\r
+\r
+ If any Unicode characters in Source contain non-zero value in the upper 8\r
+ bits, then ASSERT().\r
+ If Source is not aligned on a 16-bit boundary, then ASSERT().\r
+ If an error would be returned, then the function will also ASSERT().\r
+\r
+ If an error is returned, then the Destination is unmodified.\r
+\r
+ @param Source The pointer to a Null-terminated Unicode string.\r
+ @param Length The maximum number of Unicode characters to\r
+ convert.\r
+ @param Destination The pointer to a Null-terminated Ascii string.\r
+ @param DestMax The maximum number of Destination Ascii\r
+ char, including terminating null char.\r
+ @param DestinationLength The number of Unicode characters converted.\r
+\r
+ @retval RETURN_SUCCESS String is converted.\r
+ @retval RETURN_INVALID_PARAMETER If Destination is NULL.\r
+ If Source is NULL.\r
+ If DestinationLength is NULL.\r
+ If PcdMaximumAsciiStringLength is not zero,\r
+ and Length or DestMax is greater than\r
+ PcdMaximumAsciiStringLength.\r
+ If PcdMaximumUnicodeStringLength is not\r
+ zero, and Length or DestMax is greater than\r
+ PcdMaximumUnicodeStringLength.\r
+ If DestMax is 0.\r
+ @retval RETURN_BUFFER_TOO_SMALL If DestMax is NOT greater than\r
+ MIN(StrLen(Source), Length).\r
+ @retval RETURN_ACCESS_DENIED If Source and Destination overlap.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+UnicodeStrnToAsciiStrS (\r
+ IN CONST CHAR16 *Source,\r
+ IN UINTN Length,\r
+ OUT CHAR8 *Destination,\r
+ IN UINTN DestMax,\r
+ OUT UINTN *DestinationLength\r
+ );\r
\r
#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
\r
If String has only pad spaces, then 0 is returned.\r
If String has no pad spaces or valid decimal digits, then 0 is returned.\r
If the number represented by String overflows according to the range defined by\r
- UINTN, then ASSERT().\r
+ UINTN, then MAX_UINTN is returned.\r
If String is NULL, then ASSERT().\r
If PcdMaximumAsciiStringLength is not zero, and String contains more than\r
PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
If String has only pad spaces, then 0 is returned.\r
If String has no pad spaces or valid decimal digits, then 0 is returned.\r
If the number represented by String overflows according to the range defined by\r
- UINT64, then ASSERT().\r
+ UINT64, then MAX_UINT64 is returned.\r
If String is NULL, then ASSERT().\r
If PcdMaximumAsciiStringLength is not zero, and String contains more than\r
PcdMaximumAsciiStringLength ASCII characters not including the Null-terminator,\r
0 is returned.\r
\r
If the number represented by String overflows according to the range defined by UINTN,\r
- then ASSERT().\r
+ then MAX_UINTN is returned.\r
If String is NULL, then ASSERT().\r
If PcdMaximumAsciiStringLength is not zero,\r
and String contains more than PcdMaximumAsciiStringLength ASCII characters not including\r
0 is returned.\r
\r
If the number represented by String overflows according to the range defined by UINT64,\r
- then ASSERT().\r
+ then MAX_UINT64 is returned.\r
If String is NULL, then ASSERT().\r
If PcdMaximumAsciiStringLength is not zero,\r
and String contains more than PcdMaximumAsciiStringLength ASCII characters not including\r
IN CONST CHAR8 *String\r
);\r
\r
+#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
\r
/**\r
+ [ATTENTION] This function is deprecated for security reason.\r
+\r
Convert one Null-terminated ASCII string to a Null-terminated\r
Unicode string and returns the Unicode string.\r
\r
OUT CHAR16 *Destination\r
);\r
\r
+#endif\r
+\r
+/**\r
+ Convert one Null-terminated ASCII string to a Null-terminated\r
+ Unicode string.\r
+\r
+ This function is similar to StrCpyS.\r
+\r
+ This function converts the contents of the ASCII string Source to the Unicode\r
+ string Destination. The function terminates the Unicode string Destination by\r
+ appending a Null-terminator character at the end.\r
+\r
+ The caller is responsible to make sure Destination points to a buffer with size\r
+ equal or greater than ((AsciiStrLen (Source) + 1) * sizeof (CHAR16)) in bytes.\r
+\r
+ If Destination is not aligned on a 16-bit boundary, then ASSERT().\r
+ If an error would be returned, then the function will also ASSERT().\r
+\r
+ If an error is returned, then the Destination is unmodified.\r
+\r
+ @param Source The pointer to a Null-terminated ASCII string.\r
+ @param Destination The pointer to a Null-terminated Unicode string.\r
+ @param DestMax The maximum number of Destination Unicode\r
+ char, including terminating null char.\r
+\r
+ @retval RETURN_SUCCESS String is converted.\r
+ @retval RETURN_BUFFER_TOO_SMALL If DestMax is NOT greater than StrLen(Source).\r
+ @retval RETURN_INVALID_PARAMETER If Destination is NULL.\r
+ If Source is NULL.\r
+ If PcdMaximumUnicodeStringLength is not zero,\r
+ and DestMax is greater than\r
+ PcdMaximumUnicodeStringLength.\r
+ If PcdMaximumAsciiStringLength is not zero,\r
+ and DestMax is greater than\r
+ PcdMaximumAsciiStringLength.\r
+ If DestMax is 0.\r
+ @retval RETURN_ACCESS_DENIED If Source and Destination overlap.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+AsciiStrToUnicodeStrS (\r
+ IN CONST CHAR8 *Source,\r
+ OUT CHAR16 *Destination,\r
+ IN UINTN DestMax\r
+ );\r
+\r
+/**\r
+ Convert not more than Length successive characters from a Null-terminated\r
+ Ascii string to a Null-terminated Unicode string. If no null char is copied\r
+ from Source, then Destination[Length] is always set to null.\r
+\r
+ This function converts not more than Length successive characters from the\r
+ Ascii string Source to the Unicode string Destination. The function\r
+ terminates the Unicode string Destination by appending a Null-terminator\r
+ character at the end.\r
+\r
+ The caller is responsible to make sure Destination points to a buffer with\r
+ size not smaller than\r
+ ((MIN(AsciiStrLen(Source), Length) + 1) * sizeof (CHAR8)) in bytes.\r
+\r
+ If Destination is not aligned on a 16-bit boundary, then ASSERT().\r
+ If an error would be returned, then the function will also ASSERT().\r
+\r
+ If an error is returned, then Destination and DestinationLength are\r
+ unmodified.\r
+\r
+ @param Source The pointer to a Null-terminated Ascii string.\r
+ @param Length The maximum number of Ascii characters to convert.\r
+ @param Destination The pointer to a Null-terminated Unicode string.\r
+ @param DestMax The maximum number of Destination Unicode char,\r
+ including terminating null char.\r
+ @param DestinationLength The number of Ascii characters converted.\r
+\r
+ @retval RETURN_SUCCESS String is converted.\r
+ @retval RETURN_INVALID_PARAMETER If Destination is NULL.\r
+ If Source is NULL.\r
+ If DestinationLength is NULL.\r
+ If PcdMaximumUnicodeStringLength is not\r
+ zero, and Length or DestMax is greater than\r
+ PcdMaximumUnicodeStringLength.\r
+ If PcdMaximumAsciiStringLength is not zero,\r
+ and Length or DestMax is greater than\r
+ PcdMaximumAsciiStringLength.\r
+ If DestMax is 0.\r
+ @retval RETURN_BUFFER_TOO_SMALL If DestMax is NOT greater than\r
+ MIN(AsciiStrLen(Source), Length).\r
+ @retval RETURN_ACCESS_DENIED If Source and Destination overlap.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+AsciiStrnToUnicodeStrS (\r
+ IN CONST CHAR8 *Source,\r
+ IN UINTN Length,\r
+ OUT CHAR16 *Destination,\r
+ IN UINTN DestMax,\r
+ OUT UINTN *DestinationLength\r
+ );\r
\r
/**\r
Converts an 8-bit value to an 8-bit BCD value.\r
//\r
\r
/**\r
- Removes the last directory or file entry in a path by changing the last\r
- L'\' to a CHAR_NULL.\r
+ Removes the last directory or file entry in a path.\r
\r
@param[in, out] Path The pointer to the path to modify.\r
\r
\r
@param[in] Path The pointer to the string containing the path.\r
\r
- @return Returns Path, otherwise returns NULL to indicate that an error has occured.\r
+ @return Returns Path, otherwise returns NULL to indicate that an error has occurred.\r
**/\r
CHAR16*\r
EFIAPI\r