]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellLevel1CommandsLib/If.c
ShellPkg: Fix ARM build errors.
[mirror_edk2.git] / ShellPkg / Library / UefiShellLevel1CommandsLib / If.c
index 59069e568f42d09565d005f73c85c046977bc595..f5bc12638bac3ac52007adab60e078e4a653a0d7 100644 (file)
@@ -14,6 +14,7 @@
 \r
 #include "UefiShellLevel1CommandsLib.h"\r
 #include <Library/PrintLib.h>\r
+#include <Library/PathLib.h>\r
 \r
 typedef enum {\r
   EndTagOr,\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,6 +96,7 @@ IsValidProfile (
   CONST CHAR16  *TempLocation;\r
 \r
   ProfilesString = ShellGetEnvironmentVariable(L"profiles");\r
+  ASSERT(ProfilesString != NULL);\r
   TempLocation = StrStr(ProfilesString, String);\r
   if ((TempLocation != NULL) && (*(TempLocation-1) == L';') && (*(TempLocation+StrLen(String)) == L';')) {\r
     return (TRUE);\r
@@ -164,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
@@ -200,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
@@ -228,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
@@ -256,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
@@ -291,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
@@ -326,7 +323,6 @@ TestOperation (
       }\r
     }\r
     return (FALSE);\r
-    break;\r
   default:\r
     ASSERT(FALSE);\r
     return (FALSE);\r
@@ -336,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
@@ -660,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
@@ -737,6 +730,9 @@ 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
       CommandWalker++;\r
@@ -825,7 +821,7 @@ ShellCommandRunIf (
   BOOLEAN             CurrentValue;\r
   END_TAG_TYPE        Ending;\r
   END_TAG_TYPE        PreviousEnding;\r
-\r
+  SCRIPT_FILE         *CurrentScriptFile;\r
 \r
   Status = CommandInit();\r
   ASSERT_EFI_ERROR(Status);\r
@@ -843,8 +839,19 @@ ShellCommandRunIf (
   //\r
   // Make sure that an End exists.\r
   //\r
-  if (!MoveToTag(GetNextNode, L"endif", L"if", NULL, ShellCommandGetCurrentScriptFile(), TRUE, TRUE, FALSE)) {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SYNTAX_NO_MATCHING), gShellLevel1HiiHandle, L"EnfIf", L"If", ShellCommandGetCurrentScriptFile()->CurrentCommand->Line);\r
+  CurrentScriptFile = ShellCommandGetCurrentScriptFile();\r
+  if (!MoveToTag(GetNextNode, L"endif", L"if", NULL, CurrentScriptFile, TRUE, TRUE, FALSE)) {\r
+    ShellPrintHiiEx(\r
+      -1, \r
+      -1, \r
+      NULL, \r
+      STRING_TOKEN (STR_SYNTAX_NO_MATCHING), \r
+      gShellLevel1HiiHandle, \r
+      L"EnfIf", \r
+      L"If", \r
+      CurrentScriptFile!=NULL \r
+        && CurrentScriptFile->CurrentCommand!=NULL\r
+        ? CurrentScriptFile->CurrentCommand->Line:0);\r
     return (SHELL_DEVICE_ERROR);\r
   }\r
 \r
@@ -918,7 +925,18 @@ ShellCommandRunIf (
       // build up the next statement for analysis\r
       //\r
       if (!BuildNextStatement(CurrentParameter, &EndParameter, &Ending)) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SYNTAX_NO_MATCHING), gShellLevel1HiiHandle, L"Then", L"If", ShellCommandGetCurrentScriptFile()->CurrentCommand->Line);\r
+        CurrentScriptFile = ShellCommandGetCurrentScriptFile();\r
+        ShellPrintHiiEx(\r
+          -1, \r
+          -1, \r
+          NULL, \r
+          STRING_TOKEN (STR_SYNTAX_NO_MATCHING), \r
+          gShellLevel1HiiHandle, \r
+          L"Then", \r
+          L"If",\r
+          CurrentScriptFile!=NULL \r
+            && CurrentScriptFile->CurrentCommand!=NULL\r
+            ? CurrentScriptFile->CurrentCommand->Line:0);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
       } else {\r
         //\r
@@ -969,6 +987,7 @@ ShellCommandRunElse (
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
 {\r
+  SCRIPT_FILE *CurrentScriptFile;\r
   ASSERT_EFI_ERROR(CommandInit());\r
 \r
   if (gEfiShellParametersProtocol->Argc > 1) {\r
@@ -981,18 +1000,49 @@ ShellCommandRunElse (
     return (SHELL_UNSUPPORTED);\r
   }\r
 \r
-\r
-  if (!MoveToTag(GetPreviousNode, L"if", L"endif", NULL, ShellCommandGetCurrentScriptFile(), FALSE, TRUE, FALSE)) {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SYNTAX_NO_MATCHING), gShellLevel1HiiHandle, L"If", L"Else", ShellCommandGetCurrentScriptFile()->CurrentCommand->Line);\r
+  CurrentScriptFile = ShellCommandGetCurrentScriptFile();\r
+\r
+  if (!MoveToTag(GetPreviousNode, L"if", L"endif", NULL, CurrentScriptFile, FALSE, TRUE, FALSE)) {\r
+    ShellPrintHiiEx(\r
+      -1, \r
+      -1, \r
+      NULL, \r
+      STRING_TOKEN (STR_SYNTAX_NO_MATCHING), \r
+      gShellLevel1HiiHandle, \r
+      L"If", \r
+      L"Else", \r
+      CurrentScriptFile!=NULL \r
+        && CurrentScriptFile->CurrentCommand!=NULL\r
+        ? CurrentScriptFile->CurrentCommand->Line:0);\r
     return (SHELL_DEVICE_ERROR);\r
   }\r
-  if (!MoveToTag(GetPreviousNode, L"if", L"else", NULL, ShellCommandGetCurrentScriptFile(), FALSE, TRUE, FALSE)) {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SYNTAX_NO_MATCHING), gShellLevel1HiiHandle, L"If", L"Else", ShellCommandGetCurrentScriptFile()->CurrentCommand->Line);\r
+  if (!MoveToTag(GetPreviousNode, L"if", L"else", NULL, CurrentScriptFile, FALSE, TRUE, FALSE)) {\r
+    ShellPrintHiiEx(\r
+      -1, \r
+      -1, \r
+      NULL, \r
+      STRING_TOKEN (STR_SYNTAX_NO_MATCHING), \r
+      gShellLevel1HiiHandle, \r
+      L"If", \r
+      L"Else", \r
+      CurrentScriptFile!=NULL \r
+        && CurrentScriptFile->CurrentCommand!=NULL\r
+        ? CurrentScriptFile->CurrentCommand->Line:0);\r
     return (SHELL_DEVICE_ERROR);\r
   }\r
 \r
-  if (!MoveToTag(GetNextNode, L"endif", L"if", NULL, ShellCommandGetCurrentScriptFile(), FALSE, FALSE, FALSE)) {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SYNTAX_NO_MATCHING), gShellLevel1HiiHandle, L"EndIf", "Else", ShellCommandGetCurrentScriptFile()->CurrentCommand->Line);\r
+  if (!MoveToTag(GetNextNode, L"endif", L"if", NULL, CurrentScriptFile, FALSE, FALSE, FALSE)) {\r
+    ShellPrintHiiEx(\r
+      -1, \r
+      -1, \r
+      NULL, \r
+      STRING_TOKEN (STR_SYNTAX_NO_MATCHING), \r
+      gShellLevel1HiiHandle, \r
+      L"EndIf", \r
+      "Else", \r
+      CurrentScriptFile!=NULL \r
+        && CurrentScriptFile->CurrentCommand!=NULL\r
+        ? CurrentScriptFile->CurrentCommand->Line:0);\r
     return (SHELL_DEVICE_ERROR);\r
   }\r
 \r
@@ -1012,6 +1062,7 @@ ShellCommandRunEndIf (
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
 {\r
+  SCRIPT_FILE *CurrentScriptFile;\r
   ASSERT_EFI_ERROR(CommandInit());\r
 \r
   if (gEfiShellParametersProtocol->Argc > 1) {\r
@@ -1024,8 +1075,19 @@ ShellCommandRunEndIf (
     return (SHELL_UNSUPPORTED);\r
   }\r
 \r
-  if (!MoveToTag(GetPreviousNode, L"if", L"endif", NULL, ShellCommandGetCurrentScriptFile(), FALSE, TRUE, FALSE)) {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SYNTAX_NO_MATCHING), gShellLevel1HiiHandle, L"If", L"EndIf", ShellCommandGetCurrentScriptFile()->CurrentCommand->Line);\r
+  CurrentScriptFile = ShellCommandGetCurrentScriptFile();\r
+  if (!MoveToTag(GetPreviousNode, L"if", L"endif", NULL, CurrentScriptFile, FALSE, TRUE, FALSE)) {\r
+    ShellPrintHiiEx(\r
+      -1, \r
+      -1, \r
+      NULL, \r
+      STRING_TOKEN (STR_SYNTAX_NO_MATCHING), \r
+      gShellLevel1HiiHandle, \r
+      L"If", \r
+      L"EndIf", \r
+      CurrentScriptFile!=NULL \r
+        && CurrentScriptFile->CurrentCommand!=NULL\r
+        ? CurrentScriptFile->CurrentCommand->Line:0);\r
     return (SHELL_DEVICE_ERROR);\r
   }\r
 \r