]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellLevel1CommandsLib/For.c
Updating level 1 commands.
[mirror_edk2.git] / ShellPkg / Library / UefiShellLevel1CommandsLib / For.c
index 297a137664616c546fe89e509f6b04ad7d22b1c8..006ce6c67599bd944a07001eb512ce4eac8582ea 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for endfor and for shell level 1 functions.\r
 \r
-  Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2011, 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
 #include "UefiShellLevel1CommandsLib.h"\r
 #include <Library/PrintLib.h>\r
 \r
+/**\r
+  Determine if a valid string is a valid number for the 'for' command.\r
+\r
+  @param[in] Number The pointer to the string representation of the number to test.\r
+\r
+  @retval TRUE    The number is valid.\r
+  @retval FALSE   The number is not valid.\r
+**/\r
 BOOLEAN\r
 EFIAPI\r
 ShellIsValidForNumber (\r
@@ -308,7 +316,7 @@ ShellCommandRunFor (
       ||!((gEfiShellParametersProtocol->Argv[1][1] >= L'a' && gEfiShellParametersProtocol->Argv[1][1] <= L'z')\r
        ||(gEfiShellParametersProtocol->Argv[1][1] >= L'A' && gEfiShellParametersProtocol->Argv[1][1] <= L'Z'))\r
      ) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_VAR), gShellLevel1HiiHandle, gEfiShellParametersProtocol->Argv[2]);\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_VAR), gShellLevel1HiiHandle, gEfiShellParametersProtocol->Argv[1]);\r
       return (SHELL_INVALID_PARAMETER);\r
     }\r
 \r
@@ -379,7 +387,7 @@ ShellCommandRunFor (
         if (ArgSet == NULL) {\r
 //        ArgSet = StrnCatGrow(&ArgSet, &ArgSize, L"\"", 0);\r
         } else {\r
-          ArgSet = StrnCatGrow(&ArgSet, &ArgSize, L"  ", 0);\r
+          ArgSet = StrnCatGrow(&ArgSet, &ArgSize, L" ", 0);\r
         }\r
         ArgSet = StrnCatGrow(&ArgSet, &ArgSize, gEfiShellParametersProtocol->Argv[LoopVar], 0);\r
 //        ArgSet = StrnCatGrow(&ArgSet, &ArgSize, L" ", 0);\r
@@ -397,49 +405,60 @@ ShellCommandRunFor (
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_SCRIPT), gShellLevel1HiiHandle, ArgSet, ShellCommandGetCurrentScriptFile()->CurrentCommand->Line);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
       } else {\r
-        ArgSetWalker++;\r
-        while (ArgSetWalker != NULL && ArgSetWalker[0] == L' ') {\r
-          ArgSetWalker++;\r
+        TempSpot = StrStr(ArgSetWalker, L")");\r
+        if (TempSpot != NULL) {\r
+          TempString = TempSpot+1;\r
+          if (*(TempString) != CHAR_NULL) {\r
+            while(TempString != NULL && *TempString == L' ') {\r
+              TempString++;\r
+            }\r
+            if (StrLen(TempString) > 0) {\r
+              TempSpot = NULL;\r
+            }\r
+          }\r
         }\r
-        if (!ShellIsValidForNumber(ArgSetWalker)) {\r
+        if (TempSpot == NULL) {\r
           ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_SCRIPT), gShellLevel1HiiHandle, ArgSet, ShellCommandGetCurrentScriptFile()->CurrentCommand->Line);\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         } else {\r
-          if (ArgSetWalker[0] == L'-') {\r
-            Info->Current = 0 - (INTN)ShellStrToUintn(ArgSetWalker+1);\r
-          } else {\r
-            Info->Current = (INTN)ShellStrToUintn(ArgSetWalker);\r
-          }\r
-          ArgSetWalker  = StrStr(ArgSetWalker, L" ");\r
+          *TempSpot = CHAR_NULL;\r
+          ArgSetWalker++;\r
           while (ArgSetWalker != NULL && ArgSetWalker[0] == L' ') {\r
             ArgSetWalker++;\r
           }\r
-          if (ArgSetWalker == NULL || *ArgSetWalker == CHAR_NULL || !ShellIsValidForNumber(ArgSetWalker)){\r
+          if (!ShellIsValidForNumber(ArgSetWalker)) {\r
             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_SCRIPT), gShellLevel1HiiHandle, ArgSet, ShellCommandGetCurrentScriptFile()->CurrentCommand->Line);\r
             ShellStatus = SHELL_INVALID_PARAMETER;\r
           } else {\r
             if (ArgSetWalker[0] == L'-') {\r
-              Info->End = 0 - (INTN)ShellStrToUintn(ArgSetWalker+1);\r
+              Info->Current = 0 - (INTN)ShellStrToUintn(ArgSetWalker+1);\r
             } else {\r
-              Info->End = (INTN)ShellStrToUintn(ArgSetWalker);\r
+              Info->Current = (INTN)ShellStrToUintn(ArgSetWalker);\r
             }\r
-            if (Info->Current < Info->End) {\r
-              Info->Step            = 1;\r
-            } else {\r
-              Info->Step            = -1;\r
-            }\r
-\r
             ArgSetWalker  = StrStr(ArgSetWalker, L" ");\r
             while (ArgSetWalker != NULL && ArgSetWalker[0] == L' ') {\r
               ArgSetWalker++;\r
             }\r
-            if (ArgSetWalker != NULL && *ArgSetWalker != CHAR_NULL) {\r
-              TempSpot = StrStr(ArgSetWalker, L")");\r
-              if (TempSpot == NULL) {\r
-                ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_SCRIPT), gShellLevel1HiiHandle, ArgSet, ShellCommandGetCurrentScriptFile()->CurrentCommand->Line);\r
-                ShellStatus = SHELL_INVALID_PARAMETER;\r
+            if (ArgSetWalker == NULL || *ArgSetWalker == CHAR_NULL || !ShellIsValidForNumber(ArgSetWalker)){\r
+              ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_SCRIPT), gShellLevel1HiiHandle, ArgSet, ShellCommandGetCurrentScriptFile()->CurrentCommand->Line);\r
+              ShellStatus = SHELL_INVALID_PARAMETER;\r
+            } else {\r
+              if (ArgSetWalker[0] == L'-') {\r
+                Info->End = 0 - (INTN)ShellStrToUintn(ArgSetWalker+1);\r
               } else {\r
-                *TempSpot = CHAR_NULL;\r
+                Info->End = (INTN)ShellStrToUintn(ArgSetWalker);\r
+              }\r
+              if (Info->Current < Info->End) {\r
+                Info->Step            = 1;\r
+              } else {\r
+                Info->Step            = -1;\r
+              }\r
+\r
+              ArgSetWalker  = StrStr(ArgSetWalker, L" ");\r
+              while (ArgSetWalker != NULL && ArgSetWalker[0] == L' ') {\r
+                ArgSetWalker++;\r
+              }\r
+              if (ArgSetWalker != NULL && *ArgSetWalker != CHAR_NULL) {\r
                 if (ArgSetWalker == NULL || *ArgSetWalker == CHAR_NULL || !ShellIsValidForNumber(ArgSetWalker)){\r
                   ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_SCRIPT), gShellLevel1HiiHandle, ArgSet, ShellCommandGetCurrentScriptFile()->CurrentCommand->Line);\r
                   ShellStatus = SHELL_INVALID_PARAMETER;\r
@@ -452,8 +471,14 @@ ShellCommandRunFor (
                     } else {\r
                       Info->Step = (INTN)ShellStrToUintn(ArgSetWalker);\r
                     }\r
+\r
+                    if (StrStr(ArgSetWalker, L" ") != NULL) {\r
+                      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_SCRIPT), gShellLevel1HiiHandle, ArgSet, ShellCommandGetCurrentScriptFile()->CurrentCommand->Line);\r
+                      ShellStatus = SHELL_INVALID_PARAMETER;\r
+                    }\r
                   }\r
                 }\r
+                \r
               }\r
             }\r
           }\r
@@ -529,9 +554,9 @@ ShellCommandRunFor (
         if (Info->CurrentValue[0] == L'\"') {\r
           Info->CurrentValue++;\r
         }\r
-        while (Info->CurrentValue[0] == L' ') {\r
-          Info->CurrentValue++;\r
-        }\r
+//        while (Info->CurrentValue[0] == L' ') {\r
+//          Info->CurrentValue++;\r
+//        }\r
         if (Info->CurrentValue[0] == L'\"') {\r
           Info->CurrentValue++;\r
         }\r