]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
MdeModulePkg/CapsuleApp: Enhance Capsule-On-Disk related functions.
[mirror_edk2.git] / MdeModulePkg / Application / CapsuleApp / CapsuleApp.c
index e3c591dbf3c822c8127d8e09a28f4f5dcbc5ac01..0b5f7c86841808a18d7805ddb5375b5d507a739e 100644 (file)
@@ -849,7 +849,7 @@ PrintUsage (
   Print(L"Parameter:\n");\r
   Print(L"  -NR: No reset will be triggered for the capsule\n");\r
   Print(L"       with CAPSULE_FLAGS_PERSIST_ACROSS_RESET and without CAPSULE_FLAGS_INITIATE_RESET.\n");\r
   Print(L"Parameter:\n");\r
   Print(L"  -NR: No reset will be triggered for the capsule\n");\r
   Print(L"       with CAPSULE_FLAGS_PERSIST_ACROSS_RESET and without CAPSULE_FLAGS_INITIATE_RESET.\n");\r
-  Print(L"  -OD: Delivery of Capsules via file on Mass Storage device.");\r
+  Print(L"  -OD: Delivery of Capsules via file on Mass Storage device.\n");\r
   Print(L"  -S:  Dump capsule report variable (EFI_CAPSULE_REPORT_GUID),\n");\r
   Print(L"       which is defined in UEFI specification.\n");\r
   Print(L"  -C:  Clear capsule report variable (EFI_CAPSULE_REPORT_GUID),\n");\r
   Print(L"  -S:  Dump capsule report variable (EFI_CAPSULE_REPORT_GUID),\n");\r
   Print(L"       which is defined in UEFI specification.\n");\r
   Print(L"  -C:  Clear capsule report variable (EFI_CAPSULE_REPORT_GUID),\n");\r
@@ -1020,40 +1020,39 @@ UefiMain (
     }\r
   }\r
 \r
     }\r
   }\r
 \r
-  if (ParaOdIndex != 0) {\r
-    if (ParaOdIndex == Argc - 1) {\r
+  if (ParaOdIndex > ParaNrIndex) {\r
+    if (ParaNrIndex != 0) {\r
+      CapsuleLastIndex = ParaNrIndex - 1;\r
+    } else {\r
+      CapsuleLastIndex = ParaOdIndex - 1;\r
+    }\r
+\r
+    if (ParaOdIndex == Argc -1) {\r
       MapFsStr = NULL;\r
     } else if (ParaOdIndex == Argc - 2) {\r
       MapFsStr = Argv[Argc-1];\r
     } else {\r
       MapFsStr = NULL;\r
     } else if (ParaOdIndex == Argc - 2) {\r
       MapFsStr = Argv[Argc-1];\r
     } else {\r
-      Print (L"CapsuleApp: Invalid Position for -OD Options\n");\r
+      Print (L"CapsuleApp: Cannot specify more than one FS mapping!\n");\r
       Status = EFI_INVALID_PARAMETER;\r
       goto Done;\r
     }\r
       Status = EFI_INVALID_PARAMETER;\r
       goto Done;\r
     }\r
-\r
-    if (ParaNrIndex != 0) {\r
-      if (ParaNrIndex + 1 == ParaOdIndex) {\r
-        CapsuleLastIndex = ParaNrIndex - 1;\r
-      } else {\r
-        Print (L"CapsuleApp: Invalid Position for -NR Options\n");\r
-        Status = EFI_INVALID_PARAMETER;\r
-        goto Done;\r
-      }\r
-    } else {\r
+  } else if (ParaOdIndex < ParaNrIndex) {\r
+    if (ParaOdIndex != 0) {\r
       CapsuleLastIndex = ParaOdIndex - 1;\r
       CapsuleLastIndex = ParaOdIndex - 1;\r
-    }\r
-  } else {\r
-    if (ParaNrIndex != 0) {\r
-      if (ParaNrIndex == Argc -1) {\r
-        CapsuleLastIndex = ParaNrIndex - 1;\r
+      if (ParaOdIndex == ParaNrIndex - 1) {\r
+        MapFsStr = NULL;\r
+      } else if (ParaOdIndex == ParaNrIndex - 2) {\r
+        MapFsStr = Argv[ParaOdIndex + 1];\r
       } else {\r
       } else {\r
-        Print (L"CapsuleApp: Invalid Position for -NR Options\n");\r
+        Print (L"CapsuleApp: Cannot specify more than one FS mapping!\n");\r
         Status = EFI_INVALID_PARAMETER;\r
         goto Done;\r
       }\r
     } else {\r
         Status = EFI_INVALID_PARAMETER;\r
         goto Done;\r
       }\r
     } else {\r
-      CapsuleLastIndex = Argc - 1;\r
+      CapsuleLastIndex = ParaNrIndex - 1;\r
     }\r
     }\r
+  } else {\r
+    CapsuleLastIndex = Argc - 1;\r
   }\r
 \r
   CapsuleNum = CapsuleLastIndex - CapsuleFirstIndex + 1;\r
   }\r
 \r
   CapsuleNum = CapsuleLastIndex - CapsuleFirstIndex + 1;\r