]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellLevel1CommandsLib/If.c
ShellPkg: Update Level1 profile commands response output
[mirror_edk2.git] / ShellPkg / Library / UefiShellLevel1CommandsLib / If.c
index 62c713e58973b473cd2465bdb5cdf5519d40ca43..f548c2ea7847e7a03f151eaa613bda2696cfd20a 100644 (file)
@@ -1,7 +1,8 @@
 /** @file\r
   Main file for If and else shell level 1 function.\r
 \r
-  Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2013 - 2015, Hewlett-Packard Development Company, L.P.<BR>\r
+  Copyright (c) 2009 - 2014, 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
@@ -39,8 +40,8 @@ typedef enum {
 /**\r
   Extract the next fragment, if there is one.\r
 \r
-  @param[in,out] Statement    The current remaining statement.\r
-  @param[in] Fragment         The current fragment.\r
+  @param[in, out] Statement    The current remaining statement.\r
+  @param[in] Fragment          The current fragment.\r
 \r
   @retval FALSE   There is not another fragment.\r
   @retval TRUE    There is another fragment.\r
@@ -95,10 +96,7 @@ IsValidProfile (
   CONST CHAR16  *TempLocation;\r
 \r
   ProfilesString = ShellGetEnvironmentVariable(L"profiles");\r
-  //\r
-  // According to the Shell spec this is a required environment variable.\r
-  //\r
-  ASSERT(ProfileString != NULL);\r
+  ASSERT(ProfilesString != NULL);\r
   TempLocation = StrStr(ProfilesString, String);\r
   if ((TempLocation != NULL) && (*(TempLocation-1) == L';') && (*(TempLocation+StrLen(String)) == L';')) {\r
     return (TRUE);\r
@@ -168,7 +166,6 @@ TestOperation (
       }\r
     }\r
     return (FALSE);\r
-    break;\r
   case OperatorUnsignedLessThan:\r
   case OperatorLessThan:\r
     if (ForceStringCompare || !ShellIsHexOrDecimalNumber(Compare1, FALSE, FALSE) || !ShellIsHexOrDecimalNumber(Compare2, FALSE, FALSE)) {\r
@@ -204,7 +201,6 @@ TestOperation (
 \r
     }\r
     return (FALSE);\r
-    break;\r
   case OperatorEqual:\r
     if (ForceStringCompare || !ShellIsHexOrDecimalNumber(Compare1, FALSE, FALSE) || !ShellIsHexOrDecimalNumber(Compare2, FALSE, FALSE)) {\r
       //\r
@@ -232,7 +228,6 @@ TestOperation (
       }\r
     }\r
     return (FALSE);\r
-    break;\r
   case OperatorNotEqual:\r
     if (ForceStringCompare || !ShellIsHexOrDecimalNumber(Compare1, FALSE, FALSE) || !ShellIsHexOrDecimalNumber(Compare2, FALSE, FALSE)) {\r
       //\r
@@ -260,7 +255,6 @@ TestOperation (
       }\r
     }\r
     return (FALSE);\r
-    break;\r
   case OperatorUnsignedGreaterOrEqual:\r
   case OperatorGreatorOrEqual:\r
     if (ForceStringCompare || !ShellIsHexOrDecimalNumber(Compare1, FALSE, FALSE) || !ShellIsHexOrDecimalNumber(Compare2, FALSE, FALSE)) {\r
@@ -295,7 +289,6 @@ TestOperation (
       }\r
     }\r
     return (FALSE);\r
-    break;\r
   case OperatorLessOrEqual:\r
   case OperatorUnsignedLessOrEqual:\r
     if (ForceStringCompare || !ShellIsHexOrDecimalNumber(Compare1, FALSE, FALSE) || !ShellIsHexOrDecimalNumber(Compare2, FALSE, FALSE)) {\r
@@ -330,7 +323,6 @@ TestOperation (
       }\r
     }\r
     return (FALSE);\r
-    break;\r
   default:\r
     ASSERT(FALSE);\r
     return (FALSE);\r
@@ -340,15 +332,15 @@ TestOperation (
 /**\r
   Process an if statement and determine if its is valid or not.\r
 \r
-  @param[in,out] PassingState     Opon entry, the current state.  Upon exit, \r
-                                  the new state.\r
-  @param[in] StartParameterNumber The number of the first parameter of\r
-                                  this statement.\r
-  @param[in] EndParameterNumber   The number of the final parameter of\r
-                                  this statement.\r
-  @param[in] OperatorToUse        The type of termination operator.\r
-  @param[in] CaseInsensitive      TRUE for case insensitive, FALSE otherwise.\r
-  @param[in] ForceStringCompare   TRUE for all string based, FALSE otherwise.\r
+  @param[in, out] PassingState     Opon entry, the current state.  Upon exit, \r
+                                   the new state.\r
+  @param[in] StartParameterNumber  The number of the first parameter of\r
+                                   this statement.\r
+  @param[in] EndParameterNumber    The number of the final parameter of\r
+                                   this statement.\r
+  @param[in] OperatorToUse         The type of termination operator.\r
+  @param[in] CaseInsensitive       TRUE for case insensitive, FALSE otherwise.\r
+  @param[in] ForceStringCompare    TRUE for all string based, FALSE otherwise.\r
 \r
   @retval EFI_INVALID_PARAMETER   A parameter was invalid.\r
   @retval EFI_SUCCESS             The operation was successful.                                  \r
@@ -664,12 +656,9 @@ BuildNextStatement (
   OUT END_TAG_TYPE  *EndTag\r
   )\r
 {\r
-  CHAR16    *Buffer;\r
-  UINTN     BufferSize;\r
-\r
   *EndTag = EndTagMax;\r
 \r
-  for(Buffer = NULL, BufferSize = 0\r
+  for(\r
     ; ParameterNumber < gEfiShellParametersProtocol->Argc\r
     ; ParameterNumber++\r
    ) {\r
@@ -741,8 +730,15 @@ MoveToTagSpecial (
     //\r
     CommandName   = NULL;\r
     CommandName   = StrnCatGrow(&CommandName, NULL, CommandNode->Cl, 0);\r
+    if (CommandName == NULL) {\r
+      continue;\r
+    }\r
     CommandWalker = CommandName;\r
-    while (CommandWalker[0] == L' ') {\r
+\r
+    //\r
+    // Skip leading spaces and tabs.\r
+    //\r
+    while ((CommandWalker[0] == L' ') || (CommandWalker[0] == L'\t')) {\r
       CommandWalker++;\r
     }\r
     TempLocation  = StrStr(CommandWalker, L" ");\r
@@ -835,12 +831,12 @@ ShellCommandRunIf (
   ASSERT_EFI_ERROR(Status);\r
 \r
   if (!gEfiShellProtocol->BatchIsActive()) {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_NO_SCRIPT), gShellLevel1HiiHandle, L"If");\r
+    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_NO_SCRIPT), gShellLevel1HiiHandle, L"if");  \r
     return (SHELL_UNSUPPORTED);\r
   }\r
 \r
   if (gEfiShellParametersProtocol->Argc < 3) {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellLevel1HiiHandle);\r
+    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellLevel1HiiHandle, L"if");  \r
     return (SHELL_INVALID_PARAMETER);\r
   }\r
 \r
@@ -855,7 +851,7 @@ ShellCommandRunIf (
       NULL, \r
       STRING_TOKEN (STR_SYNTAX_NO_MATCHING), \r
       gShellLevel1HiiHandle, \r
-      L"EnfIf", \r
+      L"EndIf", \r
       L"If", \r
       CurrentScriptFile!=NULL \r
         && CurrentScriptFile->CurrentCommand!=NULL\r
@@ -918,12 +914,12 @@ ShellCommandRunIf (
       // we are at the then\r
       //\r
       if (CurrentParameter+1 != gEfiShellParametersProtocol->Argc) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_TEXT_AFTER_THEN), gShellLevel1HiiHandle);\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_TEXT_AFTER_THEN), gShellLevel1HiiHandle, L"if");  \r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
       } else {\r
         Status = PerformResultOperation(CurrentValue);\r
         if (EFI_ERROR(Status)) {\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SYNTAX_AFTER_BAD), gShellLevel1HiiHandle, gEfiShellParametersProtocol->Argv[CurrentParameter]);\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SYNTAX_AFTER_BAD), gShellLevel1HiiHandle, L"if", gEfiShellParametersProtocol->Argv[CurrentParameter]);  \r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         }\r
       }\r
@@ -961,7 +957,7 @@ ShellCommandRunIf (
           if ((Ending == EndTagOr && CurrentValue) || (Ending == EndTagAnd && !CurrentValue)) {\r
             Status = PerformResultOperation(CurrentValue);\r
             if (EFI_ERROR(Status)) {\r
-              ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SYNTAX_AFTER_BAD), gShellLevel1HiiHandle, gEfiShellParametersProtocol->Argv[CurrentParameter]);\r
+              ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SYNTAX_AFTER_BAD), gShellLevel1HiiHandle, L"if", gEfiShellParametersProtocol->Argv[CurrentParameter]);  \r
               ShellStatus = SHELL_INVALID_PARAMETER;\r
             }\r
             break;\r
@@ -999,7 +995,7 @@ ShellCommandRunElse (
   ASSERT_EFI_ERROR(CommandInit());\r
 \r
   if (gEfiShellParametersProtocol->Argc > 1) {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel1HiiHandle);\r
+    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel1HiiHandle, L"if");  \r
     return (SHELL_INVALID_PARAMETER);\r
   }\r
 \r
@@ -1074,7 +1070,7 @@ ShellCommandRunEndIf (
   ASSERT_EFI_ERROR(CommandInit());\r
 \r
   if (gEfiShellParametersProtocol->Argc > 1) {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel1HiiHandle);\r
+    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel1HiiHandle, L"if");  \r
     return (SHELL_INVALID_PARAMETER);\r
   }\r
 \r