/** @file\r
Provides interface to shell functionality for shell commands and applications.\r
\r
+ (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
Copyright 2016 Dell Inc.\r
- Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2006 - 2017, Intel Corporation. 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
which accompanies this distribution. The full text of the license may be found at\r
**/\r
\r
#include "UefiShellLib.h"\r
-#include <ShellBase.h>\r
#include <Library/SortLib.h>\r
#include <Library/BaseLib.h>\r
\r
EFI_SHELL_PARAMETERS_PROTOCOL *gEfiShellParametersProtocol;\r
EFI_HANDLE mEfiShellEnvironment2Handle;\r
FILE_HANDLE_FUNCTION_MAP FileFunctionMap;\r
+EFI_UNICODE_COLLATION_PROTOCOL *mUnicodeCollationProtocol;\r
\r
/**\r
Check if a Unicode character is a hexadecimal character.\r
@retval EFI_OUT_OF_RESOURCES Memory allocation failed.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
ShellFindSE2 (\r
IN EFI_HANDLE ImageHandle\r
)\r
@retval EFI_SUCCESS The operationw as successful.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
ShellLibConstructorWorker (\r
IN EFI_HANDLE ImageHandle,\r
IN EFI_SYSTEM_TABLE *SystemTable\r
gEfiShellParametersProtocol = NULL;\r
mEfiShellInterface = NULL;\r
mEfiShellEnvironment2Handle = NULL;\r
+ mUnicodeCollationProtocol = NULL;\r
\r
//\r
// verify that auto initialize is not set false\r
Status = gEfiShellProtocol->OpenFileByName(FileName,\r
FileHandle,\r
OpenMode);\r
- if (StrCmp(FileName, L"NUL") != 0 && !EFI_ERROR(Status) && ((OpenMode & EFI_FILE_MODE_CREATE) != 0)){\r
+ if (EFI_ERROR(Status)) {\r
+ return Status;\r
+ }\r
+\r
+ if (mUnicodeCollationProtocol == NULL) {\r
+ Status = gBS->LocateProtocol (&gEfiUnicodeCollation2ProtocolGuid, NULL, (VOID**)&mUnicodeCollationProtocol);\r
+ if (EFI_ERROR (Status)) {\r
+ gEfiShellProtocol->CloseFile (*FileHandle);\r
+ return Status;\r
+ }\r
+ }\r
+\r
+ if ((mUnicodeCollationProtocol->StriColl (mUnicodeCollationProtocol, (CHAR16*)FileName, L"NUL") != 0) &&\r
+ (mUnicodeCollationProtocol->StriColl (mUnicodeCollationProtocol, (CHAR16*)FileName, L"NULL") != 0) &&\r
+ !EFI_ERROR(Status) && ((OpenMode & EFI_FILE_MODE_CREATE) != 0)){\r
FileInfo = FileFunctionMap.GetFileInfo(*FileHandle);\r
ASSERT(FileInfo != NULL);\r
FileInfo->Attribute = Attributes;\r
@retval the resultant head of the double linked new format list;\r
**/\r
LIST_ENTRY*\r
-EFIAPI\r
InternalShellConvertFileListType (\r
IN LIST_ENTRY *FileList,\r
IN OUT LIST_ENTRY *ListHead\r
@retval FALSE the Parameter was not found. Type is not valid.\r
**/\r
BOOLEAN\r
-EFIAPI\r
InternalIsOnCheckList (\r
IN CONST CHAR16 *Name,\r
IN CONST SHELL_PARAM_ITEM *CheckList,\r
@retval FALSE the Parameter not a flag.\r
**/\r
BOOLEAN\r
-EFIAPI\r
InternalIsFlag (\r
IN CONST CHAR16 *Name,\r
IN CONST BOOLEAN AlwaysAllowNumbers,\r
ProblemParam if provided.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
InternalCommandLineParse (\r
IN CONST SHELL_PARAM_ITEM *CheckList,\r
OUT LIST_ENTRY **CheckPackage,\r
@retval !EFI_SUCCESS The operation failed.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
InternalPrintTo (\r
IN CONST CHAR16 *String\r
)\r
@return EFI_DEVICE_ERROR The console device reported an error.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
InternalShellPrintWorker(\r
IN INT32 Col OPTIONAL,\r
IN INT32 Row OPTIONAL,\r
// update the attribute\r
//\r
if (ResumeLocation != NULL) {\r
- if (*(ResumeLocation-1) == L'^') {\r
+ if ((ResumeLocation != mPostReplaceFormat2) && (*(ResumeLocation-1) == L'^')) {\r
//\r
// Move cursor back 1 position to overwrite the ^\r
//\r
break;\r
}\r
}\r
- break; case ShellPromptResponseTypeYesNoAllCancel:\r
+ break;\r
+ case ShellPromptResponseTypeYesNoAllCancel:\r
if (Prompt != NULL) {\r
ShellPrintEx(-1, -1, L"%s", Prompt);\r
}\r
if (EFI_ERROR(Status)) {\r
break;\r
}\r
- ShellPrintEx(-1, -1, L"%c", Key.UnicodeChar);\r
+\r
+ if (Key.UnicodeChar <= 127 && Key.UnicodeChar >= 32) {\r
+ ShellPrintEx (-1, -1, L"%c", Key.UnicodeChar);\r
+ }\r
+\r
switch (Key.UnicodeChar) {\r
case L'Y':\r
case L'y':\r
@retval FALSE There is a non-numeric character.\r
**/\r
BOOLEAN\r
-EFIAPI\r
InternalShellIsHexOrDecimalNumber (\r
IN CONST CHAR16 *String,\r
IN CONST BOOLEAN ForceHex,\r
\r
**/\r
CHAR16\r
-EFIAPI\r
InternalShellCharToUpper (\r
IN CHAR16 Char\r
)\r
\r
**/\r
UINTN\r
-EFIAPI\r
InternalShellHexCharToUintn (\r
IN CHAR16 Char\r
)\r
return Char - L'0';\r
}\r
\r
- return (UINTN) (10 + InternalShellCharToUpper (Char) - L'A');\r
+ return (10 + InternalShellCharToUpper (Char) - L'A');\r
}\r
\r
/**\r
@retval EFI_DEVICE_ERROR An overflow occured.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
InternalShellStrHexToUint64 (\r
IN CONST CHAR16 *String,\r
OUT UINT64 *Value,\r
@retval EFI_DEVICE_ERROR An overflow occured.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
InternalShellStrDecimalToUint64 (\r
IN CONST CHAR16 *String,\r
OUT UINT64 *Value,\r
@retval EFI_SUCCESS The operation was successful.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
InternalShellStripQuotes (\r
IN CONST CHAR16 *OriginalString,\r
OUT CHAR16 **CleanString\r