Update EfiRom to handle ClassCode and CodeRevision option correctly.
authorlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 5 May 2009 07:30:44 +0000 (07:30 +0000)
committerlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 5 May 2009 07:30:44 +0000 (07:30 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1566 7335b38e-4728-0410-8992-fb3ffe349368

Source/C/EfiRom/EfiRom.c

index f141957..732b3b5 100644 (file)
@@ -917,7 +917,7 @@ Returns:
       // To simplify string comparisons, replace slashes with dashes\r
       //\r
       Argv[0][0] = '-';\r
-      \r
+            \r
       //\r
       // Vendor ID specified with -f\r
       //\r
@@ -925,11 +925,11 @@ Returns:
         //\r
         // Make sure there's another parameter\r
         //\r
-        if (Argc > 1) {\r
+        if ((Argc > 1) && (Argv[1][0] != '-')) {\r
           Options->VendId       = (UINT16) strtol (Argv[1], NULL, 16);\r
           Options->VendIdValid  = 1;\r
         } else {\r
-               Error (NULL, 0, 2000, "Invalid parameter", "Missing Vendor ID with %s!", Argv[0]);\r
+               Error (NULL, 0, 2000, "Invalid parameter", "Missing Vendor ID with %s option!", Argv[0]);\r
           Usage ();\r
           return STATUS_ERROR;\r
         }\r
@@ -941,11 +941,11 @@ Returns:
         // Device ID specified with -i\r
         // Make sure there's another parameter\r
         //\r
-        if (Argc > 1) {\r
+        if ((Argc > 1) && (Argv[1][0] != '-')) {\r
           Options->DevId      = (UINT16) strtol (Argv[1], NULL, 16);\r
           Options->DevIdValid = 1;\r
         } else {\r
-          Error (NULL, 0, 2000, "Invalid parameter", "Missing Device ID with %s!", Argv[0]);\r
+          Error (NULL, 0, 2000, "Invalid parameter", "Missing Device ID with %s option!", Argv[0]);\r
           Usage ();\r
           return STATUS_ERROR;\r
         }\r
@@ -1027,7 +1027,7 @@ Returns:
         // Class code value for the next file in the list.\r
         // Make sure there's another parameter\r
         //\r
-        if (Argc > 1) {\r
+        if ((Argc > 1) && (Argv[1][0] != '-')) {\r
           //\r
           // No error checking on the return value. Could check for LONG_MAX,\r
           // LONG_MIN, or 0 class code value if desired. Check range (3 bytes)\r
@@ -1038,8 +1038,11 @@ Returns:
             Error (NULL, 0, 2000, "Invalid parameter", "Class code %s out of range!", Argv[1]);\r
             return STATUS_ERROR;\r
           }\r
+          if (FileList != NULL && FileList->ClassCode == 0) {\r
+            FileList->ClassCode = ClassCode;\r
+          }\r
         } else {\r
-               Error (NULL, 0, 2000, "Invalid parameter", "Missing class code value with %s!", Argv[0]);\r
+               Error (NULL, 0, 2000, "Invalid parameter", "Missing class code value with %s option!", Argv[0]);\r
           Usage ();\r
           return STATUS_ERROR;\r
         }\r
@@ -1053,24 +1056,30 @@ Returns:
         // Make sure there's another parameter\r
         //\r
         if (Argc > 1) {\r
-          //\r
-          // No error checking on the return value. Could check for LONG_MAX,\r
-          // LONG_MIN, or 0 value if desired. Check range (2 bytes)\r
-          // at least.\r
-          //\r
-          CodeRevision = (UINT32) strtol (Argv[1], NULL, 16);\r
-          if (CodeRevision & 0xFFFF0000) {\r
-            Error (NULL, 0, 2000, "Invalid parameter", "Code revision %s out of range!", Argv[1]);\r
-            return STATUS_ERROR;\r
+          if (Argv[1][0] != '-') {\r
+            //\r
+            // No error checking on the return value. Could check for LONG_MAX,\r
+            // LONG_MIN, or 0 value if desired. Check range (2 bytes)\r
+            // at least.\r
+            //\r
+            CodeRevision = (UINT32) strtol (Argv[1], NULL, 16);\r
+            if (CodeRevision & 0xFFFF0000) {\r
+              Error (NULL, 0, 2000, "Invalid parameter", "Code revision %s out of range!", Argv[1]);\r
+              return STATUS_ERROR;\r
+            }\r
+\r
+            Argv++;\r
+            Argc--;\r
+\r
+            if (FileList != NULL && FileList->CodeRevision == 0) {\r
+              FileList->CodeRevision = (UINT16) CodeRevision;\r
+            }\r
           }\r
         } else {\r
-               Error (NULL, 0, 2000, "Invalid parameter", "Missing code revision value with %s!", Argv[0]);\r
+               Error (NULL, 0, 2000, "Invalid parameter", "Missing code revision value with %s option!", Argv[0]);\r
           Usage ();\r
           return STATUS_ERROR;\r
         }\r
-\r
-        Argv++;\r
-        Argc--;\r
       } else if ((stricmp (Argv[0], "-p") == 0) || (stricmp (Argv[0], "-pci23") == 0)) {\r
         //\r
         // Default layout meets PCI 3.0 specifications, specifying this flag will for a PCI 2.3 layout.\r