4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VfrCompiler error handler.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "stdio.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "string.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "stdlib.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "VfrError.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "EfiUtilityMsgs.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstatic SVFR_ERROR_HANDLE VFR_ERROR_HANDLE_TABLE [] = {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_SUCCESS, NULL },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_ERROR_SKIPED, NULL },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_FATAL_ERROR, ": fatal error!!" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_MISMATCHED, ": unexpected token" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_INVALID_PARAMETER, ": invalid parameter" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_OUT_FOR_RESOURCES, ": system out of memory" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_UNSUPPORTED, ": unsupported" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_REDEFINED, ": already defined" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_FORMID_REDEFINED, ": form id already defined" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_QUESTIONID_REDEFINED, ": question id already defined" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_VARSTOREID_REDEFINED, ": varstore id already defined" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_UNDEFINED, ": undefined" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_VAR_NOTDEFINED_BY_QUESTION, ": some variable has not defined by a question"},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_VARSTORE_DATATYPE_REDEFINED_ERROR, ": Data Structure is defined by more than one varstores, it can't be referred as varstore, only varstore name could be used."},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_GET_EFIVARSTORE_ERROR, ": get efi varstore error"},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_EFIVARSTORE_USE_ERROR, ": can not use the efi varstore like this" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_EFIVARSTORE_SIZE_ERROR, ": unsupport efi varstore size should be <= 8 bytes" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_GET_NVVARSTORE_ERROR, ": get name value varstore error" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_QVAR_REUSE, ": variable reused by more than one question" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_FLAGS_UNSUPPORTED, ": flags unsupported" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_ERROR_ARRARY_NUM, ": array number error, the valid value is in (0 ~ MAX_INDEX-1) for UEFI vfr and in (1 ~ MAX_INDEX) for Framework Vfr" },
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_DATA_STRING_ERROR, ": data field string error or not support"},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_DEFAULT_VALUE_REDEFINED, ": default value re-defined with different value"},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_CONSTANT_ONLY, ": only constant is allowed in the expression"},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { VFR_RETURN_CODEUNDEFINED, ": undefined Error Code" }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCVfrErrorHandle::CVfrErrorHandle (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mInputFileName = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mScopeRecordListHead = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mScopeRecordListTail = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mVfrErrorHandleTable = VFR_ERROR_HANDLE_TABLE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCVfrErrorHandle::~CVfrErrorHandle (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SVfrFileScopeRecord *pNode = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (mInputFileName != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync delete mInputFileName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (mScopeRecordListHead != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync pNode = mScopeRecordListHead;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mScopeRecordListHead = mScopeRecordListHead->mNext;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync delete pNode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mScopeRecordListHead = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mScopeRecordListTail = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mVfrErrorHandleTable = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCVfrErrorHandle::SetInputFile (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *InputFile
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (InputFile != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mInputFileName = new CHAR8[strlen(InputFile) + 1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync strcpy (mInputFileName, InputFile);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSVfrFileScopeRecord::SVfrFileScopeRecord (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *Record,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 LineNum
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *FileName = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *Str = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mWholeScopeLine = LineNum;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mNext = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str = strchr (Record, ' ');
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mScopeLineStart = atoi (++Str);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str = strchr (Str, '\"');
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName = ++Str;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while((Str = strstr (FileName, "\\\\")) != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName = Str + 2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((mFileName = new CHAR8[strlen(FileName)]) != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; FileName[Index] != '\"'; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mFileName[Index] = FileName[Index];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mFileName[Index] = '\0';
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSVfrFileScopeRecord::~SVfrFileScopeRecord (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (mFileName != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync delete mFileName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCVfrErrorHandle::ParseFileScopeRecord (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *Record,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 WholeScopeLine
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SVfrFileScopeRecord *pNode = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Record == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((pNode = new SVfrFileScopeRecord(Record, WholeScopeLine)) == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (mScopeRecordListHead == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mScopeRecordListTail = mScopeRecordListHead = pNode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mScopeRecordListTail->mNext = pNode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mScopeRecordListTail = pNode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCVfrErrorHandle::GetFileNameLineNum (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 LineNum,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT CHAR8 **FileName,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *FileLine
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SVfrFileScopeRecord *pNode = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((FileName == NULL) || (FileLine == NULL)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *FileName = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *FileLine = 0xFFFFFFFF;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Some errors occur before scope record list been built.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (mScopeRecordListHead == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *FileLine = LineNum;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *FileName = mInputFileName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (pNode = mScopeRecordListHead; pNode->mNext != NULL; pNode = pNode->mNext) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((LineNum > pNode->mWholeScopeLine) && (pNode->mNext->mWholeScopeLine > LineNum)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *FileName = pNode->mFileName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *FileLine = LineNum - pNode->mWholeScopeLine + pNode->mScopeLineStart - 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *FileName = pNode->mFileName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *FileLine = LineNum - pNode->mWholeScopeLine + pNode->mScopeLineStart - 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCVfrErrorHandle::PrintMsg (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 LineNum,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *TokName,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR8 *MsgType,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR8 *ErrorMsg
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *FileName = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 FileLine;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (strncmp ("Warning", MsgType, strlen ("Warning")) == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VerboseMsg ((CHAR8 *) ErrorMsg);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GetFileNameLineNum (LineNum, &FileName, &FileLine);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Error (FileName, FileLine, 0x3000, TokName, (CHAR8 *) "\t%s\n", (CHAR8 *) ErrorMsg);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCVfrErrorHandle::HandleError (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_VFR_RETURN_CODE ErrorCode,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 LineNum,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *TokName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *FileName = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 FileLine;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CONST CHAR8 *ErrorMsg = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (mVfrErrorHandleTable == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; mVfrErrorHandleTable[Index].mErrorCode != VFR_RETURN_CODEUNDEFINED; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ErrorCode == mVfrErrorHandleTable[Index].mErrorCode) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ErrorMsg = mVfrErrorHandleTable[Index].mErrorMsg;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ErrorMsg != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GetFileNameLineNum (LineNum, &FileName, &FileLine);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Error (FileName, FileLine, 0x3000, TokName, (CHAR8 *) "\t%s\n", (CHAR8 *) ErrorMsg);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCVfrErrorHandle gCVfrErrorHandle;