/** @file\r
Provides string functions, linked list functions, math functions, synchronization\r
- functions, and CPU architecture-specific functions.\r
+ functions, file path functions, and CPU architecture-specific functions.\r
\r
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2016, 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
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
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
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
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 and Source 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
/**\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
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
);\r
\r
\r
+#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
+\r
/**\r
+ [ATTENTION] This function is deprecated for security reason.\r
+\r
Copies one Null-terminated Unicode string to another Null-terminated Unicode\r
string and returns the new Unicode string.\r
\r
\r
\r
/**\r
+ [ATTENTION] This function is deprecated for security reason.\r
+\r
Copies up to a specified length from one Null-terminated Unicode string to \r
another Null-terminated Unicode string and returns the new Unicode string.\r
\r
IN CONST CHAR16 *Source,\r
IN UINTN Length\r
);\r
-\r
+#endif\r
\r
/**\r
Returns the length of a Null-terminated Unicode string.\r
);\r
\r
\r
+#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
+\r
/**\r
+ [ATTENTION] This function is deprecated for security reason.\r
+\r
Concatenates one Null-terminated Unicode string to another Null-terminated\r
Unicode string, and returns the concatenated Unicode string.\r
\r
\r
\r
/**\r
+ [ATTENTION] This function is deprecated for security reason.\r
+\r
Concatenates up to a specified length one Null-terminated Unicode to the end \r
of another Null-terminated Unicode string, and returns the concatenated \r
Unicode string.\r
IN CONST CHAR16 *Source,\r
IN UINTN Length\r
);\r
+#endif\r
\r
/**\r
Returns the first occurrence of a Null-terminated Unicode sub-string\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
+#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
\r
/**\r
+ [ATTENTION] This function is deprecated for security reason.\r
+\r
Copies one Null-terminated ASCII string to another Null-terminated ASCII\r
string and returns the new ASCII string.\r
\r
\r
\r
/**\r
+ [ATTENTION] This function is deprecated for security reason.\r
+\r
Copies up to a specified length one Null-terminated ASCII string to another \r
Null-terminated ASCII string and returns the new ASCII string.\r
\r
IN CONST CHAR8 *Source,\r
IN UINTN Length\r
);\r
-\r
+#endif\r
\r
/**\r
Returns the length of a Null-terminated ASCII string.\r
);\r
\r
\r
+#ifndef DISABLE_NEW_DEPRECATED_INTERFACES\r
+\r
/**\r
+ [ATTENTION] This function is deprecated for security reason.\r
+\r
Concatenates one Null-terminated ASCII string to another Null-terminated\r
ASCII string, and returns the concatenated ASCII string.\r
\r
\r
\r
/**\r
+ [ATTENTION] This function is deprecated for security reason.\r
+\r
Concatenates up to a specified length one Null-terminated ASCII string to \r
the end of another Null-terminated ASCII string, and returns the \r
concatenated ASCII string.\r
IN CONST CHAR8 *Source,\r
IN UINTN Length\r
);\r
-\r
+#endif\r
\r
/**\r
Returns the first occurrence of a Null-terminated ASCII sub-string\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
Converts an 8-bit value to an 8-bit BCD value.\r
IN UINT8 Value\r
);\r
\r
+//\r
+// File Path Manipulation Functions\r
+//\r
+\r
+/**\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
+ @retval FALSE Nothing was found to remove.\r
+ @retval TRUE A directory or file was removed.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+PathRemoveLastItem(\r
+ IN OUT CHAR16 *Path\r
+ );\r
+\r
+/**\r
+ Function to clean up paths.\r
+ - Single periods in the path are removed.\r
+ - Double periods in the path are removed along with a single parent directory.\r
+ - Forward slashes L'/' are converted to backward slashes L'\'.\r
+\r
+ This will be done inline and the existing buffer may be larger than required\r
+ upon completion.\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 occurred.\r
+**/\r
+CHAR16*\r
+EFIAPI\r
+PathCleanUpDirectories(\r
+ IN CHAR16 *Path\r
+ );\r
\r
//\r
// Linked List Functions and Macros\r
IN OUT THUNK_CONTEXT *ThunkContext\r
);\r
\r
+/**\r
+ Generates a 16-bit random number through RDRAND instruction.\r
+\r
+ if Rand is NULL, then ASSERT().\r
+\r
+ @param[out] Rand Buffer pointer to store the random result.\r
+\r
+ @retval TRUE RDRAND call was successful.\r
+ @retval FALSE Failed attempts to call RDRAND.\r
+\r
+ **/\r
+BOOLEAN\r
+EFIAPI\r
+AsmRdRand16 (\r
+ OUT UINT16 *Rand\r
+ );\r
+\r
+/**\r
+ Generates a 32-bit random number through RDRAND instruction.\r
+\r
+ if Rand is NULL, then ASSERT().\r
+\r
+ @param[out] Rand Buffer pointer to store the random result.\r
+\r
+ @retval TRUE RDRAND call was successful.\r
+ @retval FALSE Failed attempts to call RDRAND.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+AsmRdRand32 (\r
+ OUT UINT32 *Rand\r
+ );\r
+\r
+/**\r
+ Generates a 64-bit random number through RDRAND instruction.\r
+\r
+ if Rand is NULL, then ASSERT().\r
+\r
+ @param[out] Rand Buffer pointer to store the random result.\r
+\r
+ @retval TRUE RDRAND call was successful.\r
+ @retval FALSE Failed attempts to call RDRAND.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+AsmRdRand64 (\r
+ OUT UINT64 *Rand\r
+ );\r
+\r
#endif\r
#endif\r
\r