]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/BootSectImage/bootsectimage.c
BaseTools: Fix compile error on VS2010
[mirror_edk2.git] / BaseTools / Source / C / BootSectImage / bootsectimage.c
index 10a545292b46b56550d3117cc338b0ed9f9c7d38..4f876ae1cc0a4c7f4a0fb8b1a7418ca329ffb2c8 100644 (file)
@@ -4,8 +4,8 @@ Abstract:
   Patch the BPB information in boot sector image file.\r
   Patch the MBR code in MBR image file.\r
 \r
-Copyright 2006 - 2008, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
+Copyright (c) 2006 - 2016, 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
 http://opensource.org/licenses/bsd-license.php                                            \r
@@ -20,6 +20,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include "fat.h"\r
 #include "mbr.h"\r
 #include "EfiUtilityMsgs.h"\r
+#include "ParseInf.h"\r
 \r
 #define DEBUG_WARN  0x1\r
 #define DEBUG_ERROR 0x2\r
@@ -32,8 +33,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 //\r
 // Utility version information\r
 //\r
-#define UTILITY_MAJOR_VERSION 0\r
-#define UTILITY_MINOR_VERSION 1\r
+#define UTILITY_MAJOR_VERSION 1\r
+#define UTILITY_MINOR_VERSION 0\r
 \r
 void\r
 Version (\r
@@ -55,8 +56,7 @@ Returns:
 \r
 --*/\r
 {\r
-  printf ("%s v%d.%d - Utility to break a file into two pieces at the specified offset.\n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION);\r
-  printf ("Copyright (c) 1999-2007 Intel Corporation. All rights reserved.\n");\r
+  printf ("%s Version %d.%d Build %s\n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION, __BUILD_VERSION);\r
 }\r
 \r
 void\r
@@ -79,6 +79,9 @@ Returns:
 --*/\r
 {\r
   Version();\r
+  printf ("Copyright (c) 1999-2016 Intel Corporation. All rights reserved.\n");\r
+  printf ("\n  The BootSectImage tool prints information or patch destination file by source\n");\r
+  printf ("  file for BIOS Parameter Block (BPB) or Master Boot Record (MBR).\n");\r
   printf ("\nUsage: \n\\r
    BootSectImage\n\\r
      [-f, --force force patch even if the FAT type of SrcImage and DstImage mismatch]\n\\r
@@ -115,7 +118,7 @@ Return:
   FILE *FileHandle;\r
   int  result;\r
 \r
-  FileHandle = fopen (FileName, "r+b");\r
+  FileHandle = fopen (LongFilePath (FileName), "r+b");\r
   if (FileHandle == NULL) {\r
     DebugMsg (NULL, 0, DEBUG_ERROR, NULL, "Open file: %s", FileName);\r
     return 0;\r
@@ -153,7 +156,7 @@ Return:
   FILE *FileHandle;\r
   int  result;\r
 \r
-  FileHandle = fopen (FileName, "rb");\r
+  FileHandle = fopen (LongFilePath (FileName), "rb");\r
   if (FileHandle == NULL) {\r
     DebugMsg (NULL, 0, DEBUG_ERROR, NULL, "ERROR: E0001: Error opening file: %s", FileName);\r
     return 0;\r
@@ -371,13 +374,13 @@ Return:
   if ((FatType == FatTypeFat32) &&\r
       (FatBpb->Fat12_16.BPB_TotSec32 == 0)) {\r
     DebugMsg (NULL, 0, DEBUG_ERROR, NULL, "ERROR: E3003: FAT32 - BPB_TotSec32 - %04x, expected: Non-Zero",\r
-        FatBpb->Fat12_16.BPB_TotSec32);\r
+        (unsigned) FatBpb->Fat12_16.BPB_TotSec32);\r
     return FatTypeUnknown;\r
   }\r
   if ((FatType == FatTypeFat32) &&\r
       (FatBpb->Fat32.BPB_FATSz32 == 0)) {\r
     DebugMsg (NULL, 0, DEBUG_ERROR, NULL, "ERROR: E3003: FAT32 - BPB_FATSz32 - %08x, expected: Non-Zero",\r
-        FatBpb->Fat32.BPB_FATSz32);\r
+        (unsigned) FatBpb->Fat32.BPB_FATSz32);\r
     return FatTypeUnknown;\r
   }\r
   if ((FatType == FatTypeFat32) &&\r
@@ -388,7 +391,7 @@ Return:
   if ((FatType == FatTypeFat32) &&\r
       (FatBpb->Fat32.BPB_RootClus != 2)) {\r
     DebugMsg (NULL, 0, DEBUG_WARN, NULL, "ERROR: E3003: FAT32 - BPB_RootClus - %08x, expected: %04x",\r
-        FatBpb->Fat32.BPB_RootClus, 2);\r
+        (unsigned) FatBpb->Fat32.BPB_RootClus, 2);\r
   }\r
   if ((FatType == FatTypeFat32) &&\r
       (FatBpb->Fat32.BPB_FSInfo != 1)) {\r
@@ -523,14 +526,14 @@ ParseBootSector (
   printf ("  16     Sectors per FAT (small vol.) %04x\n", FatBpb.Fat12_16.BPB_FATSz16);\r
   printf ("  18     Sectors per track            %04x\n", FatBpb.Fat12_16.BPB_SecPerTrk);\r
   printf ("  1A     Heads                        %04x\n", FatBpb.Fat12_16.BPB_NumHeads);\r
-  printf ("  1C     Hidden sectors               %08x\n", FatBpb.Fat12_16.BPB_HiddSec);\r
-  printf ("  20     Sectors (over 32MB)          %08x\n", FatBpb.Fat12_16.BPB_TotSec32);\r
+  printf ("  1C     Hidden sectors               %08x\n", (unsigned) FatBpb.Fat12_16.BPB_HiddSec);\r
+  printf ("  20     Sectors (over 32MB)          %08x\n", (unsigned) FatBpb.Fat12_16.BPB_TotSec32);\r
   printf ("\n");\r
   if (FatType != FatTypeFat32) {\r
     printf ("  24     BIOS drive                   %02x\n", FatBpb.Fat12_16.BS_DrvNum);\r
     printf ("  25     (Unused)                     %02x\n", FatBpb.Fat12_16.BS_Reserved1);\r
     printf ("  26     Ext. boot signature          %02x\n", FatBpb.Fat12_16.BS_BootSig);\r
-    printf ("  27     Volume serial number         %08x\n", FatBpb.Fat12_16.BS_VolID);\r
+    printf ("  27     Volume serial number         %08x\n", (unsigned) FatBpb.Fat12_16.BS_VolID);\r
     printf ("  2B     Volume lable                 %c%c%c%c%c%c%c%c%c%c%c\n",\r
                                                    FatBpb.Fat12_16.BS_VolLab[0],\r
                                                    FatBpb.Fat12_16.BS_VolLab[1],\r
@@ -555,10 +558,10 @@ ParseBootSector (
     printf ("\n");\r
   } else {\r
     printf ("FAT32 Section\n");\r
-    printf ("  24     Sectors per FAT (large vol.) %08x\n", FatBpb.Fat32.BPB_FATSz32);\r
+    printf ("  24     Sectors per FAT (large vol.) %08x\n", (unsigned) FatBpb.Fat32.BPB_FATSz32);\r
     printf ("  28     Flags                        %04x\n", FatBpb.Fat32.BPB_ExtFlags);\r
     printf ("  2A     Version                      %04x\n", FatBpb.Fat32.BPB_FSVer);\r
-    printf ("  2C     Root dir 1st cluster         %08x\n", FatBpb.Fat32.BPB_RootClus);\r
+    printf ("  2C     Root dir 1st cluster         %08x\n", (unsigned) FatBpb.Fat32.BPB_RootClus);\r
     printf ("  30     FSInfo sector                %04x\n", FatBpb.Fat32.BPB_FSInfo);\r
     printf ("  32     Backup boot sector           %04x\n", FatBpb.Fat32.BPB_BkBootSec);\r
     printf ("  34     (Reserved)                   %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n",\r
@@ -578,7 +581,7 @@ ParseBootSector (
     printf ("  40     BIOS drive                   %02x\n", FatBpb.Fat32.BS_DrvNum);\r
     printf ("  41     (Unused)                     %02x\n", FatBpb.Fat32.BS_Reserved1);\r
     printf ("  42     Ext. boot signature          %02x\n", FatBpb.Fat32.BS_BootSig);\r
-    printf ("  43     Volume serial number         %08x\n", FatBpb.Fat32.BS_VolID);\r
+    printf ("  43     Volume serial number         %08x\n", (unsigned) FatBpb.Fat32.BS_VolID);\r
     printf ("  47     Volume lable                 %c%c%c%c%c%c%c%c%c%c%c\n",\r
                                                    FatBpb.Fat32.BS_VolLab[0],\r
                                                    FatBpb.Fat32.BS_VolLab[1],\r
@@ -738,7 +741,7 @@ ParseMbr (
   printf ("  Offset Title                        Value\n");\r
   printf ("==================================================================\n");\r
   printf ("  0      Master bootstrap loader code (not list)\n");\r
-  printf ("  1B8    Windows disk signature       %08x\n", Mbr.UniqueMbrSignature);\r
+  printf ("  1B8    Windows disk signature       %08x\n", (unsigned) Mbr.UniqueMbrSignature);\r
   printf ("\n");\r
   printf ("Partition Table Entry #1\n");\r
   printf ("  1BE    80 = active partition        %02x\n", Mbr.PartitionRecord[0].BootIndicator);\r
@@ -749,8 +752,8 @@ ParseMbr (
   printf ("  1C3    End head                     %02x\n", Mbr.PartitionRecord[0].EndHead);\r
   printf ("  1C4    End sector                   %02x\n", Mbr.PartitionRecord[0].EndSector);\r
   printf ("  1C5    End cylinder                 %02x\n", Mbr.PartitionRecord[0].EndTrack);\r
-  printf ("  1C6    Sectors preceding partition  %08x\n", Mbr.PartitionRecord[0].StartingLBA);\r
-  printf ("  1CA    Sectors in partition         %08x\n", Mbr.PartitionRecord[0].SizeInLBA);\r
+  printf ("  1C6    Sectors preceding partition  %08x\n", (unsigned) Mbr.PartitionRecord[0].StartingLBA);\r
+  printf ("  1CA    Sectors in partition         %08x\n", (unsigned) Mbr.PartitionRecord[0].SizeInLBA);\r
   printf ("\n");\r
   printf ("Partition Table Entry #2\n");\r
   printf ("  1CE    80 = active partition        %02x\n", Mbr.PartitionRecord[1].BootIndicator);\r
@@ -761,8 +764,8 @@ ParseMbr (
   printf ("  1D3    End head                     %02x\n", Mbr.PartitionRecord[1].EndHead);\r
   printf ("  1D4    End sector                   %02x\n", Mbr.PartitionRecord[1].EndSector);\r
   printf ("  1D5    End cylinder                 %02x\n", Mbr.PartitionRecord[1].EndTrack);\r
-  printf ("  1D6    Sectors preceding partition  %08x\n", Mbr.PartitionRecord[1].StartingLBA);\r
-  printf ("  1DA    Sectors in partition         %08x\n", Mbr.PartitionRecord[1].SizeInLBA);\r
+  printf ("  1D6    Sectors preceding partition  %08x\n", (unsigned) Mbr.PartitionRecord[1].StartingLBA);\r
+  printf ("  1DA    Sectors in partition         %08x\n", (unsigned) Mbr.PartitionRecord[1].SizeInLBA);\r
   printf ("\n");\r
   printf ("Partition Table Entry #3\n");\r
   printf ("  1DE    80 = active partition        %02x\n", Mbr.PartitionRecord[2].BootIndicator);\r
@@ -773,8 +776,8 @@ ParseMbr (
   printf ("  1E3    End head                     %02x\n", Mbr.PartitionRecord[2].EndHead);\r
   printf ("  1E4    End sector                   %02x\n", Mbr.PartitionRecord[2].EndSector);\r
   printf ("  1E5    End cylinder                 %02x\n", Mbr.PartitionRecord[2].EndTrack);\r
-  printf ("  1E6    Sectors preceding partition  %08x\n", Mbr.PartitionRecord[2].StartingLBA);\r
-  printf ("  1EA    Sectors in partition         %08x\n", Mbr.PartitionRecord[2].SizeInLBA);\r
+  printf ("  1E6    Sectors preceding partition  %08x\n", (unsigned) Mbr.PartitionRecord[2].StartingLBA);\r
+  printf ("  1EA    Sectors in partition         %08x\n", (unsigned) Mbr.PartitionRecord[2].SizeInLBA);\r
   printf ("\n");\r
   printf ("Partition Table Entry #4\n");\r
   printf ("  1EE    80 = active partition        %02x\n", Mbr.PartitionRecord[3].BootIndicator);\r
@@ -785,8 +788,8 @@ ParseMbr (
   printf ("  1F3    End head                     %02x\n", Mbr.PartitionRecord[3].EndHead);\r
   printf ("  1F4    End sector                   %02x\n", Mbr.PartitionRecord[3].EndSector);\r
   printf ("  1F5    End cylinder                 %02x\n", Mbr.PartitionRecord[3].EndTrack);\r
-  printf ("  1F6    Sectors preceding partition  %08x\n", Mbr.PartitionRecord[3].StartingLBA);\r
-  printf ("  1FA    Sectors in partition         %08x\n", Mbr.PartitionRecord[3].SizeInLBA);\r
+  printf ("  1F6    Sectors preceding partition  %08x\n", (unsigned) Mbr.PartitionRecord[3].StartingLBA);\r
+  printf ("  1FA    Sectors in partition         %08x\n", (unsigned) Mbr.PartitionRecord[3].SizeInLBA);\r
   printf ("\n");\r
   printf ("  1FE    Signature                    %04x\n", Mbr.Signature);\r
   printf ("\n");\r
@@ -845,7 +848,9 @@ main (
   BOOLEAN ProcessMbr;    // -m\r
   BOOLEAN DoParse;       // -p SrcImage or -g SrcImage DstImage\r
   BOOLEAN Verbose;       // -v\r
-  \r
+  UINT64  LogLevel;\r
+  EFI_STATUS EfiStatus;\r
+\r
   SrcImage = DstImage = NULL;\r
   ForcePatch = FALSE;\r
   ProcessMbr = FALSE;\r
@@ -886,6 +891,26 @@ main (
       ProcessMbr = TRUE;\r
     } else if (strcmp (*argv, "-v") == 0 || strcmp (*argv, "--verbose") == 0) {\r
       Verbose    = TRUE;\r
+    } else if (strcmp (*argv, "--version") == 0) {\r
+      Version();\r
+      return 0;\r
+    } else if ((stricmp (*argv, "-d") == 0) || (stricmp (*argv, "--debug") == 0)) {\r
+      argc--; argv++;\r
+      if (argc < 1) {\r
+        Usage ();\r
+        return -1;\r
+      }\r
+      EfiStatus = AsciiStringToUint64 (*argv, FALSE, &LogLevel);\r
+      if (EFI_ERROR (EfiStatus)) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "%s = %s", "--debug", *argv);\r
+        return 1;\r
+      }\r
+      if (LogLevel > 9) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Debug Level range is 0-9, currnt input level is %d", (int) LogLevel);\r
+        return 1;\r
+      }\r
+      SetPrintLevel (LogLevel);\r
+      DebugMsg (NULL, 0, 9, "Debug Mode Set", "Debug Output Mode Level %s is set!", *argv);\r
     } else {\r
       Usage ();\r
       return -1;\r