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
-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
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+Copyright (c) 2006 - 2018, 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
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
**/\r
\r
#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
//\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
\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
--*/\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
}\r
\r
int WriteToFile (\r
- void *BootSector, \r
+ void *BootSector,\r
char *FileName\r
)\r
/*++\r
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
}\r
\r
int ReadFromFile (\r
- void *BootSector, \r
+ void *BootSector,\r
char *FileName\r
)\r
/*++\r
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
FatBpb->Fat32.BS_BootSig, FAT_BS_BOOTSIG);\r
return FatTypeUnknown;\r
}\r
- \r
+\r
if ((FatType == FatTypeFat12) || (FatType == FatTypeFat16)) {\r
memcpy (FilSysType, FatBpb->Fat12_16.BS_FilSysType, 8);\r
FilSysType[8] = 0;\r
- if ((FatType == FatTypeFat12) && \r
+ if ((FatType == FatTypeFat12) &&\r
(strcmp (FilSysType, FAT12_FILSYSTYPE) != 0) &&\r
(strcmp (FilSysType, FAT_FILSYSTYPE) != 0)) {\r
DebugMsg (NULL, 0, DEBUG_WARN, NULL, "ERROR: E3003: FAT12 - BS_FilSysType - %s, expected: %s, or %s\n",\r
FilSysType, FAT12_FILSYSTYPE, FAT_FILSYSTYPE);\r
}\r
- if ((FatType == FatTypeFat16) && \r
+ if ((FatType == FatTypeFat16) &&\r
(strcmp (FilSysType, FAT16_FILSYSTYPE) != 0) &&\r
(strcmp (FilSysType, FAT_FILSYSTYPE) != 0)) {\r
DebugMsg (NULL, 0, DEBUG_WARN, NULL, "ERROR: E3003: FAT16 - BS_FilSysType - %s, expected: %s, or %s\n",\r
{\r
FAT_BPB_STRUCT FatBpb;\r
FAT_TYPE FatType;\r
- \r
+\r
if (ReadFromFile ((void *)&FatBpb, FileName) == 0) {\r
return ;\r
}\r
- \r
+\r
FatType = GetFatType (&FatBpb);\r
if (FatType <= FatTypeUnknown || FatType >= FatTypeMax) {\r
printf ("ERROR: E3002: Unknown FAT Type!\n");\r
printf (" 1FE Signature %04x\n", FatBpb.Fat12_16.Signature);\r
printf ("\n");\r
\r
- \r
+\r
return ;\r
}\r
\r
FAT_TYPE SourceFatType;\r
CHAR8 VolLab[11];\r
CHAR8 FilSysType[8];\r
- \r
+\r
if (ReadFromFile ((void *)&DestFatBpb, DestFileName) == 0) {\r
return ;\r
}\r
if (ReadFromFile ((void *)&SourceFatBpb, SourceFileName) == 0) {\r
return ;\r
}\r
- \r
+\r
DestFatType = GetFatType (&DestFatBpb);\r
SourceFatType = GetFatType (&SourceFatBpb);\r
\r
// FAT type mismatch\r
//\r
if (ForcePatch) {\r
- DebugMsg (NULL, 0, DEBUG_WARN, NULL, "ERROR: E3004: FAT type mismatch: Source - %s, Dest - %s", \r
+ DebugMsg (NULL, 0, DEBUG_WARN, NULL, "ERROR: E3004: FAT type mismatch: Source - %s, Dest - %s",\r
FatTypeToString(SourceFatType), FatTypeToString(DestFatType));\r
} else {\r
- DebugMsg (NULL, 0, DEBUG_ERROR, NULL, "ERROR: E3004: FAT type mismatch: Source - %s, Dest - %s", \r
+ DebugMsg (NULL, 0, DEBUG_ERROR, NULL, "ERROR: E3004: FAT type mismatch: Source - %s, Dest - %s",\r
FatTypeToString(SourceFatType), FatTypeToString(DestFatType));\r
return ;\r
}\r
memcpy (DestFatBpb.Fat32.BS_VolLab, VolLab, sizeof(VolLab));\r
memcpy (DestFatBpb.Fat32.BS_FilSysType, FilSysType, sizeof(FilSysType));\r
}\r
- \r
+\r
//\r
// Set Signature of DestFatBpb to 55AA\r
//\r
)\r
{\r
MASTER_BOOT_RECORD Mbr;\r
- \r
+\r
if (ReadFromFile ((void *)&Mbr, FileName) == 0) {\r
return ;\r
}\r
- \r
+\r
printf ("\nMaster Boot Record:\n");\r
printf ("\n");\r
printf (" Offset Title Value\n");\r
{\r
MASTER_BOOT_RECORD DestMbr;\r
MASTER_BOOT_RECORD SourceMbr;\r
- \r
+\r
if (ReadFromFile ((void *)&DestMbr, DestFileName) == 0) {\r
return ;\r
}\r
if (ReadFromFile ((void *)&SourceMbr, SourceFileName) == 0) {\r
return ;\r
}\r
- \r
+\r
if (SourceMbr.Signature != MBR_SIGNATURE) {\r
printf ("ERROR: E3000: Invalid MBR!\n");\r
return;\r
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
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