]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ShellPkg: Fixes and updates for the 'parse' command
authorChris Phillips <chrisp@hp.com>
Thu, 21 Aug 2014 20:28:32 +0000 (20:28 +0000)
committerjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 21 Aug 2014 20:28:32 +0000 (20:28 +0000)
- Fix SFO file parsing to match UEFI Shell 2.1 spec
- Update help output for easier viewing

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Chris Phillips <chrisp@hp.com>
Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15873 6f19259b-4bc3-4df7-8a09-765794883524

ShellPkg/Library/UefiShellLevel2CommandsLib/Parse.c
ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni

index 4072b9469d01b961beb010224862c34c55148661..3b7a04f7a0903a5b1def228850f59500196b135b 100644 (file)
@@ -1,6 +1,7 @@
 /** @file\r
   Main file for Parse shell level 2 function.\r
 \r
+  (C) Copyright 2013-2014, Hewlett-Packard Development Company, L.P.\r
   Copyright (c) 2009 - 2012, 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
@@ -56,13 +57,22 @@ PerformParsing(
   if (EFI_ERROR(Status)) {\r
     ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellLevel2HiiHandle, FileName);\r
     ShellStatus = SHELL_NOT_FOUND;\r
+  } else if (!EFI_ERROR (FileHandleIsDirectory (FileHandle))) {\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NOT_FILE), gShellLevel2HiiHandle, FileName);\r
+    ShellStatus = SHELL_NOT_FOUND;\r
   } else {\r
     for (LoopVariable = 0 ; LoopVariable < ShellCommandInstance && !ShellFileHandleEof(FileHandle);) {\r
       TempLine = ShellFileHandleReturnLine(FileHandle, &Ascii);\r
       if (TempLine == NULL) {\r
         break;\r
       }\r
-      if (StrStr(TempLine, L"ShellCommand, \"") == TempLine) {\r
+\r
+      //\r
+      // Search for "ShellCommand," in the file to start the SFO table\r
+      // for a given ShellCommand.  The UEFI Shell spec does not specify\r
+      // a space after the comma.\r
+      //\r
+      if (StrStr (TempLine, L"ShellCommand,") == TempLine) {\r
         LoopVariable++;\r
       }\r
       SHELL_FREE_NON_NULL(TempLine);\r
@@ -71,45 +81,43 @@ PerformParsing(
       LoopVariable = 0;\r
       while(1) {\r
         TempLine = ShellFileHandleReturnLine(FileHandle, &Ascii);\r
-        if ( TempLine == NULL\r
-          || *TempLine == CHAR_NULL\r
-          || StrStr(TempLine, L"ShellCommand, \"") == TempLine\r
-         ){\r
+        if (TempLine == NULL\r
+            || *TempLine == CHAR_NULL\r
+            || StrStr (TempLine, L"ShellCommand,") == TempLine) {\r
           SHELL_FREE_NON_NULL(TempLine);\r
           break;\r
         }\r
-        if (StrStr(TempLine, TableName) == TempLine) {\r
+        if (StrStr (TempLine, TableName) == TempLine) {\r
           LoopVariable++;\r
-        }\r
-        if ( LoopVariable == TableNameInstance\r
-          || (TableNameInstance == (UINTN)-1 && StrStr(TempLine, TableName) == TempLine)\r
-         ){\r
-          for (ColumnLoop = 1, ColumnPointer = TempLine; ColumnLoop < ColumnIndex && ColumnPointer != NULL && *ColumnPointer != CHAR_NULL; ColumnLoop++) {\r
-            ColumnPointer = StrStr(ColumnPointer, L",");\r
-            if (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL){\r
-              ColumnPointer++;\r
-            }\r
-          }\r
-          if (ColumnLoop == ColumnIndex) {\r
-            if (ColumnPointer == NULL) {\r
-              ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellLevel2HiiHandle, L"Column Index");\r
-              ShellStatus = SHELL_INVALID_PARAMETER;\r
-            } else {\r
-              TempSpot = StrStr(ColumnPointer, L",");\r
-              if (TempSpot != NULL) {\r
-                *TempSpot = CHAR_NULL;\r
-              }\r
-              while (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[0] == L' '){\r
-                ColumnPointer++;\r
-              }\r
-              if (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[0] == L'\"'){\r
+          if (LoopVariable == TableNameInstance\r
+              || (TableNameInstance == (UINTN)-1)) {\r
+            for (ColumnLoop = 1, ColumnPointer = TempLine; ColumnLoop < ColumnIndex && ColumnPointer != NULL && *ColumnPointer != CHAR_NULL; ColumnLoop++) {\r
+              ColumnPointer = StrStr (ColumnPointer, L",");\r
+              if (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL){\r
                 ColumnPointer++;\r
               }\r
-              if (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[StrLen(ColumnPointer)-1] == L'\"'){\r
-                ColumnPointer[StrLen(ColumnPointer)-1] = CHAR_NULL;\r
+            }\r
+            if (ColumnLoop == ColumnIndex) {\r
+              if (ColumnPointer == NULL) {\r
+                ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellLevel2HiiHandle, L"Column Index");\r
+                ShellStatus = SHELL_INVALID_PARAMETER;\r
+              } else {\r
+                TempSpot = StrStr (ColumnPointer, L",");\r
+                if (TempSpot != NULL) {\r
+                  *TempSpot = CHAR_NULL;\r
+                }\r
+                while (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[0] == L' '){\r
+                  ColumnPointer++;\r
+                }\r
+                if (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[0] == L'\"'){\r
+                  ColumnPointer++;\r
+                }\r
+                if (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[StrLen (ColumnPointer) - 1] == L'\"'){\r
+                  ColumnPointer[StrLen (ColumnPointer) - 1] = CHAR_NULL;\r
+                }\r
+\r
+                ShellPrintEx (-1, -1, L"%s\r\n", ColumnPointer);\r
               }\r
-\r
-              ShellPrintEx(-1, -1, L"%s\r\n", ColumnPointer);\r
             }\r
           }\r
         }\r
index 464c21818997a82dc563428facdd6e065059d6b7..dd07cf04ff7fcf186d4605e74a4769f625a0b459 100644 (file)
Binary files a/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni and b/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni differ