/** @file\r
- \r
+\r
VfrCompiler main class and main function.\r
\r
-Copyright (c) 2004 - 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) 2004 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
\r
PACKAGE_DATA gCBuffer;\r
PACKAGE_DATA gRBuffer;\r
+CVfrStringDB gCVfrStringDB;\r
\r
-VOID \r
-CVfrCompiler::DebugError () {\r
- Error (NULL, 0, 0001, "Error parsing vfr file", " %s", mOptions.VfrFileName);\r
- //_asm int 3;\r
+VOID\r
+CVfrCompiler::DebugError (\r
+ IN CHAR8 *FileName,\r
+ IN UINT32 LineNumber,\r
+ IN UINT32 MessageCode,\r
+ IN CONST CHAR8 *Text,\r
+ IN CONST CHAR8 *MsgFmt,\r
+ ...\r
+ )\r
+{\r
+ va_list List;\r
+ va_start (List, MsgFmt);\r
+ PrintMessage ((CHAR8 *) "ERROR", FileName, LineNumber, MessageCode, (CHAR8 *) Text, (CHAR8 *) MsgFmt, List);\r
+ va_end (List);\r
}\r
\r
VOID\r
\r
VOID\r
CVfrCompiler::OptionInitialization (\r
- IN INT32 Argc, \r
+ IN INT32 Argc,\r
IN CHAR8 **Argv\r
)\r
{\r
INT32 Index;\r
- \r
- SetUtilityName (PROGRAM_NAME);\r
+ EFI_STATUS Status;\r
\r
- mOptions.VfrFileName[0] = '\0';\r
- mOptions.RecordListFile[0] = '\0';\r
+ Status = EFI_SUCCESS;\r
+ SetUtilityName ((CHAR8*) PROGRAM_NAME);\r
+\r
+ mOptions.VfrFileName = NULL;\r
+ mOptions.RecordListFile = NULL;\r
mOptions.CreateRecordListFile = FALSE;\r
mOptions.CreateIfrPkgFile = FALSE;\r
- mOptions.PkgOutputFileName[0] = '\0';\r
- mOptions.COutputFileName[0] = '\0';\r
- mOptions.OutputDirectory[0] = '\0';\r
- mOptions.PreprocessorOutputFileName[0] = '\0';\r
- mOptions.VfrBaseFileName[0] = '\0';\r
+ mOptions.PkgOutputFileName = NULL;\r
+ mOptions.COutputFileName = NULL;\r
+ mOptions.OutputDirectory = NULL;\r
+ mOptions.PreprocessorOutputFileName = NULL;\r
+ mOptions.VfrBaseFileName = NULL;\r
mOptions.IncludePaths = NULL;\r
mOptions.SkipCPreprocessor = TRUE;\r
mOptions.CPreprocessorOptions = NULL;\r
mOptions.CompatibleMode = FALSE;\r
- \r
+ mOptions.HasOverrideClassGuid = FALSE;\r
+ mOptions.WarningAsError = FALSE;\r
+ mOptions.AutoDefault = FALSE;\r
+ mOptions.CheckDefault = FALSE;\r
+ memset (&mOptions.OverrideClassGuid, 0, sizeof (EFI_GUID));\r
+\r
if (Argc == 1) {\r
Usage ();\r
SET_RUN_STATUS (STATUS_DEAD);\r
Usage ();\r
SET_RUN_STATUS (STATUS_DEAD);\r
return;\r
+ } else if (stricmp(Argv[Index], "--version") == 0) {\r
+ Version ();\r
+ SET_RUN_STATUS (STATUS_DEAD);\r
+ return;\r
} else if (stricmp(Argv[Index], "-l") == 0) {\r
mOptions.CreateRecordListFile = TRUE;\r
gCIfrRecordInfoDB.TurnOn ();\r
} else if (stricmp(Argv[Index], "-i") == 0) {\r
- Error (NULL, 0, 1000, "Unknown option", "unrecognized option %s", Argv[Index]);\r
- goto Fail;\r
Index++;\r
if ((Index >= Argc) || (Argv[Index][0] == '-')) {\r
- Error (NULL, 0, 1001, "Missing option", "-i missing path argument"); \r
+ DebugError (NULL, 0, 1001, "Missing option", "-i missing path argument");\r
goto Fail;\r
}\r
\r
} else if (stricmp(Argv[Index], "-o") == 0 || stricmp(Argv[Index], "--output-directory") == 0 || stricmp(Argv[Index], "-od") == 0) {\r
Index++;\r
if ((Index >= Argc) || (Argv[Index][0] == '-')) {\r
- Error (NULL, 0, 1001, "Missing option", "-o missing output directory name");\r
+ DebugError (NULL, 0, 1001, "Missing option", "-o missing output directory name");\r
+ goto Fail;\r
+ }\r
+\r
+ mOptions.OutputDirectory = (CHAR8 *) malloc (strlen (Argv[Index]) + strlen ("\\") + 1);\r
+ if (mOptions.OutputDirectory == NULL) {\r
+ DebugError (NULL, 0, 4001, "Resource: memory can't be allocated", NULL);\r
goto Fail;\r
}\r
strcpy (mOptions.OutputDirectory, Argv[Index]);\r
- \r
+\r
CHAR8 lastChar = mOptions.OutputDirectory[strlen(mOptions.OutputDirectory) - 1];\r
if ((lastChar != '/') && (lastChar != '\\')) {\r
if (strchr(mOptions.OutputDirectory, '/') != NULL) {\r
strcat (mOptions.OutputDirectory, "\\");\r
}\r
}\r
- DebugMsg (NULL, 0, 9, "Output Directory", mOptions.OutputDirectory);\r
+ DebugMsg (NULL, 0, 9, (CHAR8 *) "Output Directory", (CHAR8 *) "%s", mOptions.OutputDirectory);\r
} else if (stricmp(Argv[Index], "-b") == 0 || stricmp(Argv[Index], "--create-ifr-package") == 0 || stricmp(Argv[Index], "-ibin") == 0) {\r
mOptions.CreateIfrPkgFile = TRUE;\r
} else if (stricmp(Argv[Index], "-n") == 0 || stricmp(Argv[Index], "--no-pre-processing") == 0 || stricmp(Argv[Index], "-nopp") == 0) {\r
mOptions.SkipCPreprocessor = TRUE;\r
} else if (stricmp(Argv[Index], "-f") == 0 || stricmp(Argv[Index], "--pre-processing-flag") == 0 || stricmp(Argv[Index], "-ppflag") == 0) {\r
- Error (NULL, 0, 1000, "Unknown option", "unrecognized option %s", Argv[Index]);\r
- goto Fail;\r
Index++;\r
if ((Index >= Argc) || (Argv[Index][0] == '-')) {\r
- Error (NULL, 0, 1001, "Missing option", "-od - missing C-preprocessor argument");\r
+ DebugError (NULL, 0, 1001, "Missing option", "-od - missing C-preprocessor argument");\r
goto Fail;\r
}\r
\r
AppendCPreprocessorOptions (Argv[Index]);\r
} else if (stricmp(Argv[Index], "-c") == 0 || stricmp(Argv[Index], "--compatible-framework") == 0) {\r
mOptions.CompatibleMode = TRUE;\r
+ } else if (stricmp(Argv[Index], "-s") == 0|| stricmp(Argv[Index], "--string-db") == 0) {\r
+ Index++;\r
+ if ((Index >= Argc) || (Argv[Index][0] == '-')) {\r
+ DebugError (NULL, 0, 1001, "Missing option", "-s missing input string file name");\r
+ goto Fail;\r
+ }\r
+ gCVfrStringDB.SetStringFileName(Argv[Index]);\r
+ DebugMsg (NULL, 0, 9, (CHAR8 *) "Input string file path", (CHAR8 *) "%s", Argv[Index]);\r
+ } else if ((stricmp (Argv[Index], "-g") == 0) || (stricmp (Argv[Index], "--guid") == 0)) {\r
+ Index++;\r
+ Status = StringToGuid (Argv[Index], &mOptions.OverrideClassGuid);\r
+ if (EFI_ERROR (Status)) {\r
+ DebugError (NULL, 0, 1000, "Invalid format:", "%s", Argv[Index]);\r
+ goto Fail;\r
+ }\r
+ mOptions.HasOverrideClassGuid = TRUE;\r
+ } else if (stricmp(Argv[Index], "-w") == 0 || stricmp(Argv[Index], "--warning-as-error") == 0) {\r
+ mOptions.WarningAsError = TRUE;\r
+ } else if (stricmp(Argv[Index], "-a") == 0 ||stricmp(Argv[Index], "--autodefault") == 0) {\r
+ mOptions.AutoDefault = TRUE;\r
+ } else if (stricmp(Argv[Index], "-d") == 0 ||stricmp(Argv[Index], "--checkdefault") == 0) {\r
+ mOptions.CheckDefault = TRUE;\r
} else {\r
- Error (NULL, 0, 1000, "Unknown option", "unrecognized option %s", Argv[Index]);\r
+ DebugError (NULL, 0, 1000, "Unknown option", "unrecognized option %s", Argv[Index]);\r
goto Fail;\r
}\r
}\r
\r
if (Index != Argc - 1) {\r
- Error (NULL, 0, 1001, "Missing option", "VFR file name is not specified.");\r
+ DebugError (NULL, 0, 1001, "Missing option", "VFR file name is not specified.");\r
goto Fail;\r
} else {\r
+ mOptions.VfrFileName = (CHAR8 *) malloc (strlen (Argv[Index]) + 1);\r
+ if (mOptions.VfrFileName == NULL) {\r
+ DebugError (NULL, 0, 4001, "Resource: memory can't be allocated", NULL);\r
+ goto Fail;\r
+ }\r
strcpy (mOptions.VfrFileName, Argv[Index]);\r
+\r
+ if (mOptions.OutputDirectory == NULL) {\r
+ mOptions.OutputDirectory = (CHAR8 *) malloc (1);\r
+ if (mOptions.OutputDirectory == NULL) {\r
+ DebugError (NULL, 0, 4001, "Resource: memory can't be allocated", NULL);\r
+ goto Fail;\r
+ }\r
+ mOptions.OutputDirectory[0] = '\0';\r
+ }\r
}\r
\r
if (SetBaseFileName() != 0) {\r
Fail:\r
SET_RUN_STATUS (STATUS_DEAD);\r
\r
- mOptions.VfrFileName[0] = '\0';\r
- mOptions.RecordListFile[0] = '\0';\r
mOptions.CreateRecordListFile = FALSE;\r
mOptions.CreateIfrPkgFile = FALSE;\r
- mOptions.PkgOutputFileName[0] = '\0';\r
- mOptions.COutputFileName[0] = '\0';\r
- mOptions.OutputDirectory[0] = '\0';\r
- mOptions.PreprocessorOutputFileName[0] = '\0';\r
- mOptions.VfrBaseFileName[0] = '\0';\r
+\r
+ if (mOptions.VfrFileName != NULL) {\r
+ free (mOptions.VfrFileName);\r
+ mOptions.VfrFileName = NULL;\r
+ }\r
+ if (mOptions.VfrBaseFileName != NULL) {\r
+ free (mOptions.VfrBaseFileName);\r
+ mOptions.VfrBaseFileName = NULL;\r
+ }\r
+ if (mOptions.OutputDirectory != NULL) {\r
+ free (mOptions.OutputDirectory);\r
+ mOptions.OutputDirectory = NULL;\r
+ }\r
+ if (mOptions.PkgOutputFileName != NULL) {\r
+ free (mOptions.PkgOutputFileName);\r
+ mOptions.PkgOutputFileName = NULL;\r
+ }\r
+ if (mOptions.COutputFileName != NULL) {\r
+ free (mOptions.COutputFileName);\r
+ mOptions.COutputFileName = NULL;\r
+ }\r
+ if (mOptions.PreprocessorOutputFileName != NULL) {\r
+ free (mOptions.PreprocessorOutputFileName);\r
+ mOptions.PreprocessorOutputFileName = NULL;\r
+ }\r
+ if (mOptions.RecordListFile != NULL) {\r
+ free (mOptions.RecordListFile);\r
+ mOptions.RecordListFile = NULL;\r
+ }\r
if (mOptions.IncludePaths != NULL) {\r
delete mOptions.IncludePaths;\r
mOptions.IncludePaths = NULL;\r
- } \r
+ }\r
if (mOptions.CPreprocessorOptions != NULL) {\r
delete mOptions.CPreprocessorOptions;\r
mOptions.CPreprocessorOptions = NULL;\r
}\r
IncludePaths = new CHAR8[Len];\r
if (IncludePaths == NULL) {\r
- Error (NULL, 0, 4001, "Resource: memory can't be allocated", NULL);\r
+ DebugError (NULL, 0, 4001, "Resource: memory can't be allocated", NULL);\r
return;\r
}\r
IncludePaths[0] = '\0';\r
strcat (IncludePaths, " -I ");\r
strcat (IncludePaths, PathStr);\r
if (mOptions.IncludePaths != NULL) {\r
- delete mOptions.IncludePaths;\r
+ delete[] mOptions.IncludePaths;\r
}\r
mOptions.IncludePaths = IncludePaths;\r
}\r
}\r
Opt = new CHAR8[Len];\r
if (Opt == NULL) {\r
- Error (NULL, 0, 4001, "Resource: memory can't be allocated", NULL);\r
+ DebugError (NULL, 0, 4001, "Resource: memory can't be allocated", NULL);\r
return;\r
}\r
Opt[0] = 0;\r
strcat (Opt, " ");\r
strcat (Opt, Options);\r
if (mOptions.CPreprocessorOptions != NULL) {\r
- delete mOptions.CPreprocessorOptions;\r
+ delete[] mOptions.CPreprocessorOptions;\r
}\r
mOptions.CPreprocessorOptions = Opt;\r
}\r
{\r
CHAR8 *pFileName, *pPath, *pExt;\r
\r
- if (mOptions.VfrFileName[0] == '\0') {\r
+ if (mOptions.VfrFileName == NULL) {\r
return -1;\r
}\r
\r
return -1;\r
}\r
\r
- strncpy (mOptions.VfrBaseFileName, pFileName, pExt - pFileName);\r
- mOptions.VfrBaseFileName[pExt - pFileName] = '\0';\r
+ *pExt = '\0';\r
+\r
+ mOptions.VfrBaseFileName = (CHAR8 *) malloc (strlen (pFileName) + 1);\r
+ if (mOptions.VfrBaseFileName == NULL) {\r
+ *pExt = '.';\r
+ return -1;\r
+ }\r
+\r
+ strcpy (mOptions.VfrBaseFileName, pFileName);\r
+ *pExt = '.';\r
\r
return 0;\r
}\r
VOID\r
)\r
{\r
- if (mOptions.VfrBaseFileName[0] == '\0') {\r
+ INTN Length;\r
+\r
+ if (mOptions.VfrBaseFileName == NULL) {\r
+ return -1;\r
+ }\r
+\r
+ Length = strlen (mOptions.OutputDirectory) +\r
+ strlen (mOptions.VfrBaseFileName) +\r
+ strlen (VFR_PACKAGE_FILENAME_EXTENSION) +\r
+ 1;\r
+\r
+ mOptions.PkgOutputFileName = (CHAR8 *) malloc (Length);\r
+ if (mOptions.PkgOutputFileName == NULL) {\r
return -1;\r
}\r
\r
VOID\r
)\r
{\r
- if (mOptions.VfrBaseFileName[0] == '\0') {\r
+ INTN Length;\r
+\r
+ if (mOptions.VfrBaseFileName == NULL) {\r
+ return -1;\r
+ }\r
+\r
+ Length = strlen (mOptions.OutputDirectory) +\r
+ strlen (mOptions.VfrBaseFileName) +\r
+ strlen (".c") +\r
+ 1;\r
+\r
+ mOptions.COutputFileName = (CHAR8 *) malloc (Length);\r
+ if (mOptions.COutputFileName == NULL) {\r
return -1;\r
}\r
\r
VOID\r
)\r
{\r
- if (mOptions.VfrBaseFileName[0] == '\0') {\r
+ INTN Length;\r
+\r
+ if (mOptions.VfrBaseFileName == NULL) {\r
+ return -1;\r
+ }\r
+\r
+ Length = strlen (mOptions.OutputDirectory) +\r
+ strlen (mOptions.VfrBaseFileName) +\r
+ strlen (VFR_PREPROCESS_FILENAME_EXTENSION) +\r
+ 1;\r
+\r
+ mOptions.PreprocessorOutputFileName = (CHAR8 *) malloc (Length);\r
+ if (mOptions.PreprocessorOutputFileName == NULL) {\r
return -1;\r
}\r
\r
VOID\r
)\r
{\r
- if (mOptions.VfrBaseFileName[0] == '\0') {\r
+ INTN Length;\r
+\r
+ if (mOptions.VfrBaseFileName == NULL) {\r
+ return -1;\r
+ }\r
+\r
+ Length = strlen (mOptions.OutputDirectory) +\r
+ strlen (mOptions.VfrBaseFileName) +\r
+ strlen (VFR_RECORDLIST_FILENAME_EXTENSION) +\r
+ 1;\r
+\r
+ mOptions.RecordListFile = (CHAR8 *) malloc (Length);\r
+ if (mOptions.RecordListFile == NULL) {\r
return -1;\r
}\r
\r
}\r
\r
CVfrCompiler::CVfrCompiler (\r
- IN INT32 Argc, \r
+ IN INT32 Argc,\r
IN CHAR8 **Argv\r
)\r
{\r
- mPreProcessCmd = PREPROCESSOR_COMMAND;\r
- mPreProcessOpt = PREPROCESSOR_OPTIONS;\r
+ mPreProcessCmd = (CHAR8 *) PREPROCESSOR_COMMAND;\r
+ mPreProcessOpt = (CHAR8 *) PREPROCESSOR_OPTIONS;\r
+\r
+ SET_RUN_STATUS (STATUS_STARTED);\r
\r
OptionInitialization(Argc, Argv);\r
\r
VOID\r
)\r
{\r
+ if (mOptions.VfrFileName != NULL) {\r
+ free (mOptions.VfrFileName);\r
+ mOptions.VfrFileName = NULL;\r
+ }\r
+\r
+ if (mOptions.VfrBaseFileName != NULL) {\r
+ free (mOptions.VfrBaseFileName);\r
+ mOptions.VfrBaseFileName = NULL;\r
+ }\r
+\r
+ if (mOptions.OutputDirectory != NULL) {\r
+ free (mOptions.OutputDirectory);\r
+ mOptions.OutputDirectory = NULL;\r
+ }\r
+\r
+ if (mOptions.PkgOutputFileName != NULL) {\r
+ free (mOptions.PkgOutputFileName);\r
+ mOptions.PkgOutputFileName = NULL;\r
+ }\r
+\r
+ if (mOptions.COutputFileName != NULL) {\r
+ free (mOptions.COutputFileName);\r
+ mOptions.COutputFileName = NULL;\r
+ }\r
+\r
+ if (mOptions.PreprocessorOutputFileName != NULL) {\r
+ free (mOptions.PreprocessorOutputFileName);\r
+ mOptions.PreprocessorOutputFileName = NULL;\r
+ }\r
+\r
+ if (mOptions.RecordListFile != NULL) {\r
+ free (mOptions.RecordListFile);\r
+ mOptions.RecordListFile = NULL;\r
+ }\r
+\r
if (mOptions.IncludePaths != NULL) {\r
- delete mOptions.IncludePaths;\r
+ delete[] mOptions.IncludePaths;\r
mOptions.IncludePaths = NULL;\r
}\r
\r
if (mOptions.CPreprocessorOptions != NULL) {\r
- delete mOptions.CPreprocessorOptions;\r
+ delete[] mOptions.CPreprocessorOptions;\r
mOptions.CPreprocessorOptions = NULL;\r
}\r
\r
SET_RUN_STATUS(STATUS_DEAD);\r
}\r
\r
-VOID \r
+VOID\r
CVfrCompiler::Usage (\r
VOID\r
)\r
{\r
UINT32 Index;\r
CONST CHAR8 *Help[] = {\r
- " ", \r
- "VfrCompile version " VFR_COMPILER_VERSION VFR_COMPILER_UPDATE_TIME,\r
+ " ",\r
+ "VfrCompile version " VFR_COMPILER_VERSION "Build " __BUILD_VERSION,\r
+ "Copyright (c) 2004-2016 Intel Corporation. All rights reserved.",\r
" ",\r
"Usage: VfrCompile [options] VfrFile",\r
" ",\r
"Options:",\r
" -h, --help prints this help",\r
+ " --version prints version info",\r
" -l create an output IFR listing file",\r
" -o DIR, --output-directory DIR",\r
" deposit all output files to directory OutputDir",\r
" do not preprocessing input file",\r
" -c, --compatible-framework",\r
" compatible framework vfr file",\r
+ " -s, --string-db",\r
+ " input uni string package file",\r
+ " -g, --guid",\r
+ " override class guid input",\r
+ " format is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",\r
+ " -w --warning-as-error",\r
+ " treat warning as an error",\r
+ " -a --autodefaut generate default value for question opcode if some default is missing",\r
+ " -d --checkdefault check the default information in a question opcode",\r
+ NULL\r
+ };\r
+ for (Index = 0; Help[Index] != NULL; Index++) {\r
+ fprintf (stdout, "%s\n", Help[Index]);\r
+ }\r
+}\r
+\r
+VOID\r
+CVfrCompiler::Version (\r
+ VOID\r
+ )\r
+{\r
+ UINT32 Index;\r
+ CONST CHAR8 *Help[] = {\r
+ "VfrCompile version " VFR_COMPILER_VERSION "Build " __BUILD_VERSION,\r
NULL\r
};\r
for (Index = 0; Help[Index] != NULL; Index++) {\r
goto Out;\r
}\r
\r
- if ((pVfrFile = fopen (mOptions.VfrFileName, "r")) == NULL) {\r
- Error (NULL, 0, 0001, "Error opening the input VFR file", mOptions.VfrFileName);\r
+ if ((pVfrFile = fopen (LongFilePath (mOptions.VfrFileName), "r")) == NULL) {\r
+ DebugError (NULL, 0, 0001, "Error opening the input VFR file", "%s", mOptions.VfrFileName);\r
goto Fail;\r
}\r
fclose (pVfrFile);\r
\r
- CmdLen = strlen (mPreProcessCmd) + strlen (mPreProcessOpt) + \r
- strlen (mOptions.VfrFileName) + strlen (mOptions.PreprocessorOutputFileName);\r
+ CmdLen = strlen (mPreProcessCmd) + strlen (mPreProcessOpt) +\r
+ strlen (mOptions.VfrFileName) + strlen (mOptions.PreprocessorOutputFileName);\r
if (mOptions.CPreprocessorOptions != NULL) {\r
CmdLen += strlen (mOptions.CPreprocessorOptions);\r
}\r
\r
PreProcessCmd = new CHAR8[CmdLen + 10];\r
if (PreProcessCmd == NULL) {\r
- Error (NULL, 0, 4001, "Resource: memory can't be allocated", NULL);\r
+ DebugError (NULL, 0, 4001, "Resource: memory can't be allocated", NULL);\r
goto Fail;\r
}\r
strcpy (PreProcessCmd, mPreProcessCmd), strcat (PreProcessCmd, " ");\r
strcat (PreProcessCmd, mOptions.PreprocessorOutputFileName);\r
\r
if (system (PreProcessCmd) != 0) {\r
- Error (NULL, 0, 0003, "Error parsing file", "failed to spawn C preprocessor on VFR file %s\n", PreProcessCmd);\r
+ DebugError (NULL, 0, 0003, "Error parsing file", "failed to spawn C preprocessor on VFR file %s\n", PreProcessCmd);\r
goto Fail;\r
}\r
\r
- delete PreProcessCmd;\r
+ delete[] PreProcessCmd;\r
\r
Out:\r
SET_RUN_STATUS (STATUS_PREPROCESSED);\r
if (!IS_RUN_STATUS(STATUS_DEAD)) {\r
SET_RUN_STATUS (STATUS_FAILED);\r
}\r
- delete PreProcessCmd;\r
+ delete[] PreProcessCmd;\r
}\r
\r
-extern UINT8 VfrParserStart (IN FILE *, IN BOOLEAN);\r
+extern UINT8 VfrParserStart (IN FILE *, IN INPUT_INFO_TO_SYNTAX *);\r
\r
VOID\r
CVfrCompiler::Compile (\r
{\r
FILE *pInFile = NULL;\r
CHAR8 *InFileName = NULL;\r
+ INPUT_INFO_TO_SYNTAX InputInfo;\r
\r
if (!IS_RUN_STATUS(STATUS_PREPROCESSED)) {\r
goto Fail;\r
InFileName = (mOptions.SkipCPreprocessor == TRUE) ? mOptions.VfrFileName : mOptions.PreprocessorOutputFileName;\r
\r
gCVfrErrorHandle.SetInputFile (InFileName);\r
+ gCVfrErrorHandle.SetWarningAsError(mOptions.WarningAsError);\r
\r
- if ((pInFile = fopen (InFileName, "r")) == NULL) {\r
- Error (NULL, 0, 0001, "Error opening the input file", InFileName);\r
+ if ((pInFile = fopen (LongFilePath (InFileName), "r")) == NULL) {\r
+ DebugError (NULL, 0, 0001, "Error opening the input file", "%s", InFileName);\r
goto Fail;\r
}\r
\r
- if (VfrParserStart (pInFile, mOptions.CompatibleMode) != 0) {\r
+ InputInfo.CompatibleMode = mOptions.CompatibleMode;\r
+ if (mOptions.HasOverrideClassGuid) {\r
+ InputInfo.OverrideClassGuid = &mOptions.OverrideClassGuid;\r
+ } else {\r
+ InputInfo.OverrideClassGuid = NULL;\r
+ }\r
+\r
+ if (VfrParserStart (pInFile, &InputInfo) != 0) {\r
goto Fail;\r
}\r
\r
fclose (pInFile);\r
+ pInFile = NULL;\r
\r
if (gCFormPkg.HavePendingUnassigned () == TRUE) {\r
gCFormPkg.PendingAssignPrintAll ();\r
\r
Fail:\r
if (!IS_RUN_STATUS(STATUS_DEAD)) {\r
- Error (NULL, 0, 0003, "Error parsing", "compile error in file %s", InFileName);\r
+ DebugError (NULL, 0, 0003, "Error parsing", "compile error in file %s", InFileName);\r
SET_RUN_STATUS (STATUS_FAILED);\r
}\r
if (pInFile != NULL) {\r
)\r
{\r
EFI_VFR_RETURN_CODE Status;\r
+\r
+ if (!IS_RUN_STATUS(STATUS_COMPILEED)) {\r
+ return;\r
+ }\r
+\r
+ if (gNeedAdjustOpcode) {\r
+ //\r
+ // When parsing the Vfr, has created some opcodes, now need to update the record info.\r
+ //\r
+ gCIfrRecordInfoDB.IfrUpdateRecordInfoForDynamicOpcode (FALSE);\r
+ }\r
+\r
+ //\r
+ // Check whether need to check default info for question or auto add default for question.\r
+ //\r
+ if (mOptions.AutoDefault || mOptions.CheckDefault) {\r
+ gCIfrRecordInfoDB.IfrCheckAddDefaultRecord (mOptions.AutoDefault, mOptions.CheckDefault);\r
+ }\r
+\r
//\r
// Check Binary Code consistent between Form and IfrRecord\r
//\r
// Get Package Data and IfrRecord Data\r
//\r
gCFormPkg.BuildPkg (gCBuffer);\r
- gCIfrRecordInfoDB.IfrRecordOutput (gRBuffer); \r
+ gCIfrRecordInfoDB.IfrRecordOutput (gRBuffer);\r
\r
//\r
// Compare Form and Record data\r
if (gCBuffer.Buffer != NULL && gRBuffer.Buffer != NULL) {\r
UINT32 Index;\r
if (gCBuffer.Size != gRBuffer.Size) {\r
- Error (NULL, 0, 0001, "Error parsing vfr file", " %s. FormBinary Size 0x%X is not same to RecordBuffer Size 0x%X", mOptions.VfrFileName, gCBuffer.Size, gRBuffer.Size);\r
+ DebugError (NULL, 0, 0001, "Error parsing vfr file", " %s. FormBinary Size 0x%X is not same to RecordBuffer Size 0x%X", mOptions.VfrFileName, gCBuffer.Size, gRBuffer.Size);\r
}\r
for (Index = 0; Index < gCBuffer.Size; Index ++) {\r
if (gCBuffer.Buffer[Index] != gRBuffer.Buffer[Index]) {\r
}\r
}\r
if (Index != gCBuffer.Size) {\r
- Error (NULL, 0, 0001, "Error parsing vfr file", " %s. the 0x%X byte is different between Form and Record", mOptions.VfrFileName, Index);\r
+ DebugError (NULL, 0, 0001, "Error parsing vfr file", " %s. the 0x%X byte is different between Form and Record", mOptions.VfrFileName, Index);\r
}\r
- DebugMsg (NULL, 0, 9, "IFR Buffer", "Form Buffer same to Record Buffer and Size is 0x%X", Index);\r
+ DebugMsg (NULL, 0, 9, (CHAR8 *) "IFR Buffer", (CHAR8 *) "Form Buffer same to Record Buffer and Size is 0x%X", Index);\r
} else if (gCBuffer.Buffer == NULL && gRBuffer.Buffer == NULL) {\r
//ok\r
} else {\r
- Error (NULL, 0, 0001, "Error parsing vfr file", " %s.Buffer not allocated.", mOptions.VfrFileName);\r
+ DebugError (NULL, 0, 0001, "Error parsing vfr file", " %s.Buffer not allocated.", mOptions.VfrFileName);\r
}\r
\r
//\r
//\r
// Re get the IfrRecord Buffer.\r
//\r
- gCIfrRecordInfoDB.IfrRecordOutput (gRBuffer); \r
+ gCIfrRecordInfoDB.IfrRecordOutput (gRBuffer);\r
}\r
\r
return;\r
}\r
\r
if (mOptions.CreateIfrPkgFile == TRUE) {\r
- if ((pFile = fopen (mOptions.PkgOutputFileName, "wb")) == NULL) {\r
- Error (NULL, 0, 0001, "Error opening file", mOptions.PkgOutputFileName);\r
+ if ((pFile = fopen (LongFilePath (mOptions.PkgOutputFileName), "wb")) == NULL) {\r
+ DebugError (NULL, 0, 0001, "Error opening file", "%s", mOptions.PkgOutputFileName);\r
goto Fail;\r
}\r
if (gCFormPkg.BuildPkg (pFile, &gRBuffer) != VFR_RETURN_SUCCESS) {\r
if (!IS_RUN_STATUS(STATUS_GENBINARY)) {\r
goto Fail;\r
}\r
- \r
+\r
if (!mOptions.CreateIfrPkgFile || mOptions.CompatibleMode) {\r
- if ((pFile = fopen (mOptions.COutputFileName, "w")) == NULL) {\r
- Error (NULL, 0, 0001, "Error opening output C file", mOptions.COutputFileName);\r
+ if ((pFile = fopen (LongFilePath (mOptions.COutputFileName), "w")) == NULL) {\r
+ DebugError (NULL, 0, 0001, "Error opening output C file", "%s", mOptions.COutputFileName);\r
goto Fail;\r
}\r
\r
fprintf (pFile, "%s\n", gSourceFileHeader[Index]);\r
}\r
\r
- if (mOptions.CompatibleMode) { \r
+ if (mOptions.CompatibleMode) {\r
gCVfrBufferConfig.OutputCFile (pFile, mOptions.VfrBaseFileName);\r
}\r
\r
\r
InFileName = (mOptions.SkipCPreprocessor == TRUE) ? mOptions.VfrFileName : mOptions.PreprocessorOutputFileName;\r
\r
- if (mOptions.CreateRecordListFile == TRUE) {\r
+ if (mOptions.CreateRecordListFile == TRUE && InFileName != NULL && mOptions.RecordListFile != NULL) {\r
if ((InFileName[0] == '\0') || (mOptions.RecordListFile[0] == '\0')) {\r
return;\r
}\r
\r
- if ((pInFile = fopen (InFileName, "r")) == NULL) {\r
- Error (NULL, 0, 0001, "Error opening the input VFR preprocessor output file", InFileName);\r
+ if ((pInFile = fopen (LongFilePath (InFileName), "r")) == NULL) {\r
+ DebugError (NULL, 0, 0001, "Error opening the input VFR preprocessor output file", "%s", InFileName);\r
return;\r
}\r
\r
- if ((pOutFile = fopen (mOptions.RecordListFile, "w")) == NULL) {\r
- Error (NULL, 0, 0001, "Error opening the record list file", mOptions.RecordListFile);\r
+ if ((pOutFile = fopen (LongFilePath (mOptions.RecordListFile), "w")) == NULL) {\r
+ DebugError (NULL, 0, 0001, "Error opening the record list file", "%s", mOptions.RecordListFile);\r
goto Err1;\r
}\r
\r
- fprintf (pOutFile, "//\n// VFR compiler version " VFR_COMPILER_VERSION "\n//\n");\r
+ fprintf (pOutFile, "//\n// VFR compiler version " VFR_COMPILER_VERSION __BUILD_VERSION "\n//\n");\r
LineNo = 0;\r
while (!feof (pInFile)) {\r
if (fgets (LineBuf, MAX_VFR_LINE_LEN, pInFile) != NULL) {\r
gCIfrRecordInfoDB.IfrRecordOutput (pOutFile, LineNo);\r
}\r
}\r
- \r
+\r
fprintf (pOutFile, "\n//\n// All Opcode Record List \n//\n");\r
gCIfrRecordInfoDB.IfrRecordOutput (pOutFile, 0);\r
gCVfrVarDataTypeDB.Dump(pOutFile);\r
\r
int\r
main (\r
- IN INT32 Argc, \r
- IN CHAR8 **Argv\r
+ IN int Argc,\r
+ IN char **Argv\r
)\r
{\r
COMPILER_RUN_STATUS Status;\r
+\r
+ SetPrintLevel(WARNING_LOG_LEVEL);\r
CVfrCompiler Compiler(Argc, Argv);\r
- \r
+\r
Compiler.PreProcess();\r
Compiler.Compile();\r
Compiler.AdjustBin();\r
}\r
\r
if (gCBuffer.Buffer != NULL) {\r
- delete gCBuffer.Buffer;\r
+ delete[] gCBuffer.Buffer;\r
}\r
- \r
+\r
if (gRBuffer.Buffer != NULL) {\r
- delete gRBuffer.Buffer;\r
+ delete[] gRBuffer.Buffer;\r
}\r
\r
return GetUtilityStatus ();\r
}\r
\r
+\r