]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
BaseTools: Clean up source files
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / VfrFormPkg.cpp
index aa27ce0be72e0682bbda0e9183eaa7bfb3969079..2944ffc76b9c30b13b277bd5d4dbfff71c4dbc72 100644 (file)
@@ -1,15 +1,15 @@
 /** @file\r
-  \r
+\r
   The definition of CFormPkg's member function\r
 \r
-Copyright (c) 2004 - 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
-                                                                                          \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
+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
@@ -22,9 +22,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
  */\r
 \r
 SPendingAssign::SPendingAssign (\r
-  IN CHAR8  *Key, \r
-  IN VOID   *Addr, \r
-  IN UINT32 Len, \r
+  IN CHAR8  *Key,\r
+  IN VOID   *Addr,\r
+  IN UINT32 Len,\r
   IN UINT32 LineNo,\r
   IN CONST CHAR8  *Msg\r
   )\r
@@ -56,20 +56,20 @@ SPendingAssign::~SPendingAssign (
   )\r
 {\r
   if (mKey != NULL) {\r
-    delete mKey;\r
+    delete[] mKey;\r
   }\r
   mAddr   = NULL;\r
   mLen    = 0;\r
   mLineNo = 0;\r
   if (mMsg != NULL) {\r
-    delete mMsg;\r
+    delete[] mMsg;\r
   }\r
   mNext   = NULL;\r
 }\r
 \r
 VOID\r
 SPendingAssign::SetAddrAndLen (\r
-  IN VOID   *Addr, \r
+  IN VOID   *Addr,\r
   IN UINT32 LineNo\r
   )\r
 {\r
@@ -79,7 +79,7 @@ SPendingAssign::SetAddrAndLen (
 \r
 VOID\r
 SPendingAssign::AssignValue (\r
-  IN VOID   *Addr, \r
+  IN VOID   *Addr,\r
   IN UINT32 Len\r
   )\r
 {\r
@@ -104,8 +104,13 @@ CFormPkg::CFormPkg (
   SBufferNode *Node;\r
 \r
   mPkgLength           = 0;\r
+  mBufferSize          = 0;\r
   mBufferNodeQueueHead = NULL;\r
+  mBufferNodeQueueTail = NULL;\r
   mCurrBufferNode      = NULL;\r
+  mReadBufferNode      = NULL;\r
+  mReadBufferOffset    = 0;\r
+  PendingAssignList    = NULL;\r
 \r
   Node = new SBufferNode;\r
   if (Node == NULL) {\r
@@ -113,6 +118,7 @@ CFormPkg::CFormPkg (
   }\r
   BufferStart = new CHAR8[BufferSize];\r
   if (BufferStart == NULL) {\r
+    delete Node;\r
     return;\r
   }\r
   BufferEnd   = BufferStart + BufferSize;\r
@@ -138,7 +144,7 @@ CFormPkg::~CFormPkg ()
     pBNode = mBufferNodeQueueHead;\r
     mBufferNodeQueueHead = mBufferNodeQueueHead->mNext;\r
     if (pBNode->mBufferStart != NULL) {\r
-      delete pBNode->mBufferStart;\r
+      delete[] pBNode->mBufferStart;\r
       delete pBNode;\r
     }\r
   }\r
@@ -249,7 +255,7 @@ CFormPkg::Close (
 \r
 UINT32\r
 CFormPkg::Read (\r
-  IN CHAR8     *Buffer, \r
+  IN CHAR8     *Buffer,\r
   IN UINT32    Size\r
   )\r
 {\r
@@ -303,7 +309,7 @@ CFormPkg::BuildPkg (
   OUT PACKAGE_DATA &TBuffer\r
   )\r
 {\r
-  \r
+\r
   CHAR8  *Temp;\r
   UINT32 Size;\r
   CHAR8  Buffer[1024];\r
@@ -351,7 +357,7 @@ CFormPkg::BuildPkg (
   }\r
   fwrite (PkgHdr, sizeof (EFI_HII_PACKAGE_HEADER), 1, Output);\r
   delete PkgHdr;\r
-  \r
+\r
   if (PkgData == NULL) {\r
     Open ();\r
     while ((Size = Read (Buffer, 1024)) != 0) {\r
@@ -421,7 +427,7 @@ UINT32   gAdjustOpcodeOffset = 0;
 BOOLEAN  gNeedAdjustOpcode   = FALSE;\r
 UINT32   gAdjustOpcodeLen    = 0;\r
 \r
-EFI_VFR_RETURN_CODE \r
+EFI_VFR_RETURN_CODE\r
 CFormPkg::GenCFile (\r
   IN CHAR8 *BaseName,\r
   IN FILE *pFile,\r
@@ -448,24 +454,24 @@ CFormPkg::GenCFile (
   // For framework vfr file, the extension framework header will be added.\r
   //\r
   if (VfrCompatibleMode) {\r
-         fprintf (pFile, "  // FRAMEWORK PACKAGE HEADER Length\n");\r
-         PkgLength = PkgHdr->Length + sizeof (UINT32) + 2;\r
-         _WRITE_PKG_LINE(pFile, BYTES_PRE_LINE, "  ", (CHAR8 *)&PkgLength, sizeof (UINT32));   \r
-         fprintf (pFile, "\n\n  // FRAMEWORK PACKAGE HEADER Type\n");\r
-         PkgLength = 3;\r
-         _WRITE_PKG_LINE(pFile, BYTES_PRE_LINE, "  ", (CHAR8 *)&PkgLength, sizeof (UINT16));   \r
-       } else {\r
-         fprintf (pFile, "  // ARRAY LENGTH\n");\r
-         PkgLength = PkgHdr->Length + sizeof (UINT32);\r
-         _WRITE_PKG_LINE(pFile, BYTES_PRE_LINE, "  ", (CHAR8 *)&PkgLength, sizeof (UINT32));   \r
-       }\r
+    fprintf (pFile, "  // FRAMEWORK PACKAGE HEADER Length\n");\r
+    PkgLength = PkgHdr->Length + sizeof (UINT32) + 2;\r
+    _WRITE_PKG_LINE(pFile, BYTES_PRE_LINE, "  ", (CHAR8 *)&PkgLength, sizeof (UINT32));\r
+    fprintf (pFile, "\n\n  // FRAMEWORK PACKAGE HEADER Type\n");\r
+    PkgLength = 3;\r
+    _WRITE_PKG_LINE(pFile, BYTES_PRE_LINE, "  ", (CHAR8 *)&PkgLength, sizeof (UINT16));\r
+  } else {\r
+    fprintf (pFile, "  // ARRAY LENGTH\n");\r
+    PkgLength = PkgHdr->Length + sizeof (UINT32);\r
+    _WRITE_PKG_LINE(pFile, BYTES_PRE_LINE, "  ", (CHAR8 *)&PkgLength, sizeof (UINT32));\r
+  }\r
 \r
   fprintf (pFile, "\n\n  // PACKAGE HEADER\n");\r
   _WRITE_PKG_LINE(pFile, BYTES_PRE_LINE, "  ", (CHAR8 *)PkgHdr, sizeof (EFI_HII_PACKAGE_HEADER));\r
   PkgLength = sizeof (EFI_HII_PACKAGE_HEADER);\r
 \r
   fprintf (pFile, "\n\n  // PACKAGE DATA\n");\r
-  \r
+\r
   if (PkgData == NULL) {\r
     Open ();\r
     while ((ReadSize = Read ((CHAR8 *)Buffer, BYTES_PRE_LINE * 8)) != 0) {\r
@@ -497,8 +503,8 @@ CFormPkg::GenCFile (
 \r
 EFI_VFR_RETURN_CODE\r
 CFormPkg::AssignPending (\r
-  IN CHAR8  *Key, \r
-  IN VOID   *ValAddr, \r
+  IN CHAR8  *Key,\r
+  IN VOID   *ValAddr,\r
   IN UINT32 ValLen,\r
   IN UINT32 LineNo,\r
   IN CONST CHAR8  *Msg\r
@@ -518,8 +524,8 @@ CFormPkg::AssignPending (
 \r
 VOID\r
 CFormPkg::DoPendingAssign (\r
-  IN CHAR8  *Key, \r
-  IN VOID   *ValAddr, \r
+  IN CHAR8  *Key,\r
+  IN VOID   *ValAddr,\r
   IN UINT32 ValLen\r
   )\r
 {\r
@@ -825,10 +831,12 @@ CFormPkg::DeclarePendingQuestion (
   CHAR8          FName[MAX_NAME_LEN];\r
   CHAR8          *SName;\r
   CHAR8          *NewStr;\r
-  UINT32         ShrinkSize;\r
+  UINT32         ShrinkSize = 0;\r
   EFI_VFR_RETURN_CODE  ReturnCode;\r
   EFI_VFR_VARSTORE_TYPE VarStoreType  = EFI_VFR_VARSTORE_INVALID;\r
-  EFI_VARSTORE_ID       VarStoreId    = EFI_VARSTORE_ID_INVALID;\r
+  UINT8    LFlags;\r
+  UINT32   MaxValue;\r
+  CIfrGuid *GuidObj = NULL;\r
 \r
   //\r
   // Declare all questions as Numeric in DisableIf True\r
@@ -836,22 +844,16 @@ CFormPkg::DeclarePendingQuestion (
   // DisableIf\r
   CIfrDisableIf DIObj;\r
   DIObj.SetLineNo (LineNo);\r
-  *InsertOpcodeAddr = DIObj.GetObjBinAddr ();\r
-  \r
+  *InsertOpcodeAddr = DIObj.GetObjBinAddr<CHAR8>();\r
+\r
   //TrueOpcode\r
   CIfrTrue TObj (LineNo);\r
 \r
   // Declare Numeric qeustion for each undefined question.\r
   for (pNode = PendingAssignList; pNode != NULL; pNode = pNode->mNext) {\r
     if (pNode->mFlag == PENDING) {\r
-      CIfrNumeric CNObj;\r
-      EFI_VARSTORE_INFO Info; \r
+      EFI_VARSTORE_INFO Info;\r
       EFI_QUESTION_ID   QId   = EFI_QUESTION_ID_INVALID;\r
-\r
-      CNObj.SetLineNo (LineNo);\r
-      CNObj.SetPrompt (0x0);\r
-      CNObj.SetHelp (0x0);\r
-\r
       //\r
       // Register this question, assume it is normal question, not date or time question\r
       //\r
@@ -861,7 +863,7 @@ CFormPkg::DeclarePendingQuestion (
         gCVfrErrorHandle.HandleError (ReturnCode, pNode->mLineNo, pNode->mKey);\r
         return ReturnCode;\r
       }\r
\r
+\r
 #ifdef VFREXP_DEBUG\r
       printf ("Undefined Question name is %s and Id is 0x%x\n", VarStr, QId);\r
 #endif\r
@@ -881,14 +883,14 @@ CFormPkg::DeclarePendingQuestion (
         gCVfrErrorHandle.PrintMsg (pNode->mLineNo, FName, "Error", "Var Store Type is not defined");\r
         return ReturnCode;\r
       }\r
-      VarStoreType = lCVfrDataStorage.GetVarStoreType (Info.mVarStoreId); \r
+      VarStoreType = lCVfrDataStorage.GetVarStoreType (Info.mVarStoreId);\r
 \r
       if (*VarStr == '\0' && ArrayIdx != INVALID_ARRAY_INDEX) {\r
         ReturnCode = lCVfrDataStorage.GetNameVarStoreInfo (&Info, ArrayIdx);\r
       } else {\r
         if (VarStoreType == EFI_VFR_VARSTORE_EFI) {\r
           ReturnCode = lCVfrDataStorage.GetEfiVarStoreInfo (&Info);\r
-        } else if (VarStoreType == EFI_VFR_VARSTORE_BUFFER) {\r
+        } else if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_BUFFER_BITS) {\r
           VarStr = pNode->mKey;\r
           //convert VarStr with store name to VarStr with structure name\r
           ReturnCode = lCVfrDataStorage.GetBufferVarStoreDataTypeName (Info.mVarStoreId, &SName);\r
@@ -897,8 +899,8 @@ CFormPkg::DeclarePendingQuestion (
             NewStr[0] = '\0';\r
             strcpy (NewStr, SName);\r
             strcat (NewStr, VarStr + strlen (FName));\r
-            ReturnCode = lCVfrVarDataTypeDB.GetDataFieldInfo (NewStr, Info.mInfo.mVarOffset, Info.mVarType, Info.mVarTotalSize);\r
-            delete NewStr;\r
+            ReturnCode = lCVfrVarDataTypeDB.GetDataFieldInfo (NewStr, Info.mInfo.mVarOffset, Info.mVarType, Info.mVarTotalSize, Info.mIsBitVar);\r
+            delete[] NewStr;\r
           }\r
         } else {\r
           ReturnCode = VFR_RETURN_UNSUPPORTED;\r
@@ -908,39 +910,63 @@ CFormPkg::DeclarePendingQuestion (
         gCVfrErrorHandle.HandleError (ReturnCode, pNode->mLineNo, pNode->mKey);\r
         return ReturnCode;\r
       }\r
-\r
-      CNObj.SetQuestionId (QId);\r
-      CNObj.SetVarStoreInfo (&Info);\r
       //\r
-      // Numeric doesn't support BOOLEAN data type. \r
-      // BOOLEAN type has the same data size to UINT8. \r
+      // If the storage is bit fields, create Guid opcode to wrap the numeric opcode.\r
       //\r
-      if (Info.mVarType == EFI_IFR_TYPE_BOOLEAN) {\r
-        Info.mVarType = EFI_IFR_TYPE_NUM_SIZE_8;\r
+      if (Info.mIsBitVar) {\r
+        GuidObj = new CIfrGuid(0);\r
+        GuidObj->SetGuid (&gEdkiiIfrBitVarGuid);\r
+        GuidObj->SetLineNo(LineNo);\r
       }\r
-      CNObj.SetFlags (0, Info.mVarType);\r
+\r
+      CIfrNumeric CNObj;\r
+      CNObj.SetLineNo (LineNo);\r
+      CNObj.SetPrompt (0x0);\r
+      CNObj.SetHelp (0x0);\r
+      CNObj.SetQuestionId (QId);\r
+      CNObj.SetVarStoreInfo (&Info);\r
+\r
       //\r
-      // Use maximum value not to limit the vaild value for the undefined question.\r
+      // Set Min/Max/Step Data and flags for the question with bit fields.Min/Max/Step Data are saved as UINT32 type for bit question.\r
       //\r
-      switch (Info.mVarType) {\r
-      case EFI_IFR_TYPE_NUM_SIZE_64:\r
-        CNObj.SetMinMaxStepData ((UINT64) 0, (UINT64) -1 , (UINT64) 0);\r
-        ShrinkSize = 0;\r
-        break;\r
-      case EFI_IFR_TYPE_NUM_SIZE_32:\r
-        CNObj.SetMinMaxStepData ((UINT32) 0, (UINT32) -1 , (UINT32) 0);\r
+      if (Info.mIsBitVar) {\r
+        MaxValue = (1 << Info.mVarTotalSize) -1;\r
+        CNObj.SetMinMaxStepData ((UINT32) 0, MaxValue, (UINT32) 0);\r
         ShrinkSize = 12;\r
-        break;\r
-      case EFI_IFR_TYPE_NUM_SIZE_16:\r
-        CNObj.SetMinMaxStepData ((UINT16) 0, (UINT16) -1 , (UINT16) 0);\r
-        ShrinkSize = 18;\r
-        break;\r
-      case EFI_IFR_TYPE_NUM_SIZE_8:\r
-        CNObj.SetMinMaxStepData ((UINT8) 0, (UINT8) -1 , (UINT8) 0);\r
-        ShrinkSize = 21;\r
-        break;\r
-      default:\r
-        break;\r
+        LFlags = (EDKII_IFR_NUMERIC_SIZE_BIT & Info.mVarTotalSize);\r
+        CNObj.SetFlagsForBitField (0, LFlags);\r
+      } else {\r
+        //\r
+        // Numeric doesn't support BOOLEAN data type.\r
+        // BOOLEAN type has the same data size to UINT8.\r
+        //\r
+        if (Info.mVarType == EFI_IFR_TYPE_BOOLEAN) {\r
+          Info.mVarType = EFI_IFR_TYPE_NUM_SIZE_8;\r
+        }\r
+        CNObj.SetFlags (0, Info.mVarType);\r
+        //\r
+        // Use maximum value not to limit the vaild value for the undefined question.\r
+        //\r
+        switch (Info.mVarType) {\r
+        case EFI_IFR_TYPE_NUM_SIZE_64:\r
+          CNObj.SetMinMaxStepData ((UINT64) 0, (UINT64) -1 , (UINT64) 0);\r
+          ShrinkSize = 0;\r
+          break;\r
+        case EFI_IFR_TYPE_NUM_SIZE_32:\r
+          CNObj.SetMinMaxStepData ((UINT32) 0, (UINT32) -1 , (UINT32) 0);\r
+          ShrinkSize = 12;\r
+          break;\r
+        case EFI_IFR_TYPE_NUM_SIZE_16:\r
+          CNObj.SetMinMaxStepData ((UINT16) 0, (UINT16) -1 , (UINT16) 0);\r
+          ShrinkSize = 18;\r
+          break;\r
+        case EFI_IFR_TYPE_NUM_SIZE_8:\r
+          CNObj.SetMinMaxStepData ((UINT8) 0, (UINT8) -1 , (UINT8) 0);\r
+          ShrinkSize = 21;\r
+          break;\r
+        default:\r
+          break;\r
+        }\r
       }\r
       CNObj.ShrinkBinSize (ShrinkSize);\r
 \r
@@ -956,8 +982,18 @@ CFormPkg::DeclarePendingQuestion (
       //\r
       // End for Numeric\r
       //\r
-      CIfrEnd CEObj; \r
+      CIfrEnd CEObj;\r
       CEObj.SetLineNo (LineNo);\r
+      //\r
+      // End for Guided opcode\r
+      //\r
+      if (GuidObj != NULL) {\r
+        CIfrEnd CEObjGuid;\r
+        CEObjGuid.SetLineNo (LineNo);\r
+        GuidObj->SetScope(1);\r
+        delete GuidObj;\r
+        GuidObj = NULL;\r
+      }\r
     }\r
   }\r
 \r
@@ -1113,10 +1149,10 @@ CIfrRecordInfoDB::IfrRecordOutput (
   )\r
 {\r
   CHAR8      *Temp;\r
-  SIfrRecord *pNode; \r
+  SIfrRecord *pNode;\r
 \r
   if (TBuffer.Buffer != NULL) {\r
-    delete TBuffer.Buffer;\r
+    delete[] TBuffer.Buffer;\r
   }\r
 \r
   TBuffer.Size = 0;\r
@@ -1125,18 +1161,18 @@ CIfrRecordInfoDB::IfrRecordOutput (
 \r
   if (mSwitch == FALSE) {\r
     return;\r
-  } \r
-   \r
+  }\r
+\r
   for (pNode = mIfrRecordListHead; pNode != NULL; pNode = pNode->mNext) {\r
     TBuffer.Size += pNode->mBinBufLen;\r
   }\r
-  \r
+\r
   if (TBuffer.Size != 0) {\r
     TBuffer.Buffer = new CHAR8[TBuffer.Size];\r
   } else {\r
     return;\r
   }\r
-  \r
+\r
   Temp = TBuffer.Buffer;\r
 \r
   for (pNode = mIfrRecordListHead; pNode != NULL; pNode = pNode->mNext) {\r
@@ -1146,8 +1182,8 @@ CIfrRecordInfoDB::IfrRecordOutput (
     }\r
   }\r
 \r
-  return;   \r
-}   \r
+  return;\r
+}\r
 \r
 VOID\r
 CIfrRecordInfoDB::IfrRecordOutput (\r
@@ -1181,7 +1217,7 @@ CIfrRecordInfoDB::IfrRecordOutput (
       fprintf (File, "\n");\r
     }\r
   }\r
-  \r
+\r
   if (LineNo == 0) {\r
     fprintf (File, "\nTotal Size of all record is 0x%08X\n", TotalSize);\r
   }\r
@@ -1228,7 +1264,7 @@ CIfrRecordInfoDB::CheckIdOpCode (
   default:\r
     return FALSE;\r
   }\r
-} \r
+}\r
 \r
 EFI_QUESTION_ID\r
 CIfrRecordInfoDB::GetOpcodeQuestionId (\r
@@ -1236,9 +1272,9 @@ CIfrRecordInfoDB::GetOpcodeQuestionId (
   )\r
 {\r
   EFI_IFR_QUESTION_HEADER *QuestionHead;\r
-  \r
+\r
   QuestionHead = (EFI_IFR_QUESTION_HEADER *) (OpHead + 1);\r
-  \r
+\r
   return QuestionHead->QuestionId;\r
 }\r
 \r
@@ -1297,6 +1333,7 @@ CIfrRecordInfoDB::IfrAdjustDynamicOpcodeInRecords (
   SIfrRecord         *pAdjustNode, *pNodeBeforeAdjust;\r
   SIfrRecord         *pNodeBeforeDynamic;\r
 \r
+  pPreNode            = NULL;\r
   pAdjustNode         = NULL;\r
   pNodeBeforeDynamic  = NULL;\r
   OpcodeOffset        = 0;\r
@@ -1364,7 +1401,7 @@ CIfrRecordInfoDB::IfrUpdateRecordInfoForDynamicOpcode (
   // Base on the original offset info to update the record list.\r
   //\r
   if (!IfrAdjustDynamicOpcodeInRecords(CreateOpcodeAfterParsingVfr)) {\r
-    gCVfrErrorHandle.PrintMsg (0, "Error", "Can not find the adjust offset in the record.");\r
+    gCVfrErrorHandle.PrintMsg (0, (CHAR8 *)"Error", (CHAR8 *)"Can not find the adjust offset in the record.");\r
   }\r
 \r
   //\r
@@ -1409,7 +1446,6 @@ CIfrRecordInfoDB::IfrRecordAdjust (
   EFI_QUESTION_ID    QuestionId;\r
   UINT32             StackCount;\r
   UINT32             QuestionScope;\r
-  UINT32             OpcodeOffset;\r
   CHAR8              ErrorMsg[MAX_STRING_LEN] = {0, };\r
   EFI_VFR_RETURN_CODE  Status;\r
 \r
@@ -1422,7 +1458,7 @@ CIfrRecordInfoDB::IfrRecordAdjust (
   QuestionScope = 0;\r
   while (pNode != NULL) {\r
     OpHead = (EFI_IFR_OP_HEADER *) pNode->mIfrBinBuf;\r
-    \r
+\r
     //\r
     // make sure the inconsistent opcode in question scope\r
     //\r
@@ -1432,7 +1468,7 @@ CIfrRecordInfoDB::IfrRecordAdjust (
         QuestionScope --;\r
       }\r
     }\r
-    \r
+\r
     if (CheckQuestionOpCode (OpHead->OpCode)) {\r
       QuestionScope = 1;\r
     }\r
@@ -1445,7 +1481,7 @@ CIfrRecordInfoDB::IfrRecordAdjust (
       //\r
 \r
       //\r
-      // Count inconsistent opcode Scope \r
+      // Count inconsistent opcode Scope\r
       //\r
       StackCount = OpHead->Scope;\r
       QuestionId = EFI_QUESTION_ID_INVALID;\r
@@ -1463,7 +1499,7 @@ CIfrRecordInfoDB::IfrRecordAdjust (
         //\r
         // by IdEqual opcode to get QuestionId\r
         //\r
-        if (QuestionId == EFI_QUESTION_ID_INVALID && \r
+        if (QuestionId == EFI_QUESTION_ID_INVALID &&\r
             CheckIdOpCode (tOpHead->OpCode)) {\r
           QuestionId = *(EFI_QUESTION_ID *) (tOpHead + 1);\r
         }\r
@@ -1481,13 +1517,13 @@ CIfrRecordInfoDB::IfrRecordAdjust (
       // extract inconsistent opcode list\r
       // pNode is Incosistent opcode, tNode is End Opcode\r
       //\r
-      \r
+\r
       //\r
       // insert inconsistent opcode list into the right question scope by questionid\r
       //\r
       for (uNode = mIfrRecordListHead; uNode != NULL; uNode = uNode->mNext) {\r
         tOpHead = (EFI_IFR_OP_HEADER *) uNode->mIfrBinBuf;\r
-        if (CheckQuestionOpCode (tOpHead->OpCode) && \r
+        if (CheckQuestionOpCode (tOpHead->OpCode) &&\r
             (QuestionId == GetOpcodeQuestionId (tOpHead))) {\r
           break;\r
         }\r
@@ -1502,7 +1538,7 @@ CIfrRecordInfoDB::IfrRecordAdjust (
           //\r
           OpHead->OpCode = EFI_IFR_NO_SUBMIT_IF_OP;\r
         }\r
-        \r
+\r
         //\r
         // skip the default storage for Date and Time\r
         //\r
@@ -1529,7 +1565,7 @@ CIfrRecordInfoDB::IfrRecordAdjust (
         Status = VFR_RETURN_MISMATCHED;\r
         break;\r
       }\r
-    } else if (OpHead->OpCode == EFI_IFR_VARSTORE_OP || \r
+    } else if (OpHead->OpCode == EFI_IFR_VARSTORE_OP ||\r
                OpHead->OpCode == EFI_IFR_VARSTORE_EFI_OP) {\r
       //\r
       // for new added group of varstore opcode\r
@@ -1537,9 +1573,9 @@ CIfrRecordInfoDB::IfrRecordAdjust (
       tNode = pNode;\r
       while (tNode->mNext != NULL) {\r
         tOpHead = (EFI_IFR_OP_HEADER *) tNode->mNext->mIfrBinBuf;\r
-        if (tOpHead->OpCode != EFI_IFR_VARSTORE_OP && \r
+        if (tOpHead->OpCode != EFI_IFR_VARSTORE_OP &&\r
             tOpHead->OpCode != EFI_IFR_VARSTORE_EFI_OP) {\r
-          break;    \r
+          break;\r
         }\r
         tNode = tNode->mNext;\r
       }\r
@@ -1547,22 +1583,22 @@ CIfrRecordInfoDB::IfrRecordAdjust (
       if (tNode->mNext == NULL) {\r
         //\r
         // invalid IfrCode, IfrCode end by EndOpCode\r
-        // \r
+        //\r
         gCVfrErrorHandle.PrintMsg (0, NULL, "Error", "No found End Opcode in the end");\r
         Status = VFR_RETURN_MISMATCHED;\r
         break;\r
       }\r
-      \r
+\r
       if (tOpHead->OpCode != EFI_IFR_END_OP) {\r
           //\r
           // not new added varstore, which are not needed to be adjust.\r
           //\r
           preNode = tNode;\r
           pNode   = tNode->mNext;\r
-          continue;        \r
+          continue;\r
       } else {\r
         //\r
-        // move new added varstore opcode to the position befor form opcode \r
+        // move new added varstore opcode to the position befor form opcode\r
         // varstore opcode between pNode and tNode\r
         //\r
 \r
@@ -1603,9 +1639,9 @@ CIfrRecordInfoDB::IfrRecordAdjust (
     // next node\r
     //\r
     preNode = pNode;\r
-    pNode = pNode->mNext; \r
+    pNode = pNode->mNext;\r
   }\r
-  \r
+\r
   //\r
   // Update Ifr Opcode Offset\r
   //\r
@@ -1845,6 +1881,7 @@ CIfrRecordInfoDB::IfrCreateDefaultForQuestion (
     // Point to the first expression opcode.\r
     //\r
     pSNode = pDefaultNode->mNext;\r
+    pENode = NULL;\r
     ScopeCount++;\r
     //\r
     // Get opcode number behind the EFI_IFR_DEFAULT_2 until reach its END opcode (including the END opcode of EFI_IFR_DEFAULT_2)\r
@@ -1888,7 +1925,7 @@ CIfrRecordInfoDB::IfrCreateDefaultForQuestion (
           Obj = new CIfrObj (pOpHead->OpCode, NULL, pSNode->mBinBufLen, FALSE);\r
           assert (Obj != NULL);\r
           Obj->SetLineNo (pSNode->mLineNo);\r
-          ObjBinBuf = Obj->GetObjBinAddr();\r
+          ObjBinBuf = Obj->GetObjBinAddr<CHAR8>();\r
           memcpy (ObjBinBuf, pSNode->mIfrBinBuf, (UINTN)pSNode->mBinBufLen);\r
           delete Obj;\r
           pSNode = pSNode->mNext;\r
@@ -2201,7 +2238,7 @@ CIfrObj::_EMIT_PENDING_OBJ (
   )\r
 {\r
   CHAR8  *ObjBinBuf = NULL;\r
-  \r
+\r
   //\r
   // do nothing\r
   //\r
@@ -2217,15 +2254,15 @@ CIfrObj::_EMIT_PENDING_OBJ (
   if (ObjBinBuf != NULL) {\r
     memmove (ObjBinBuf, mObjBinBuf, mObjBinLen);\r
   }\r
-  \r
+\r
   //\r
   // update bin buffer to package data buffer\r
   //\r
   if (mObjBinBuf != NULL) {\r
-    delete mObjBinBuf;\r
+    delete[] mObjBinBuf;\r
     mObjBinBuf = ObjBinBuf;\r
   }\r
-  \r
+\r
   mDelayEmit = FALSE;\r
 }\r
 \r
@@ -2389,6 +2426,7 @@ CIfrObj::CIfrObj (
   mObjBinLen   = (ObjBinLen == 0) ? gOpcodeSizesScopeTable[OpCode].mSize : ObjBinLen;\r
   mObjBinBuf   = ((DelayEmit == FALSE) && (gCreateOp == TRUE)) ? gCFormPkg.IfrBinBufferGet (mObjBinLen) : new CHAR8[EFI_IFR_MAX_LENGTH];\r
   mRecordIdx   = (gCreateOp == TRUE) ? gCIfrRecordInfoDB.IfrRecordRegister (0xFFFFFFFF, mObjBinBuf, mObjBinLen, mPkgOffset) : EFI_IFR_RECORDINFO_IDX_INVALUD;\r
+  mLineNo      = 0;\r
 \r
   assert (mObjBinBuf != NULL);\r
 \r