\r
Vfr common library functions.\r
\r
-Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>\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
case EFI_IFR_TYPE_STRING :\r
memcpy (mValue, &Value.string, mWidth);\r
break;\r
+ case EFI_IFR_TYPE_BUFFER :\r
+ memcpy (mValue, &Value.u8, mWidth);\r
+ break;\r
+\r
case EFI_IFR_TYPE_OTHER :\r
return;\r
}\r
VOID\r
)\r
{\r
- BUFFER_SAFE_FREE (mValue);\r
+ ARRAY_SAFE_FREE (mValue);\r
}\r
\r
SConfigItem::SConfigItem (\r
{\r
SConfigInfo *Info;\r
\r
- BUFFER_SAFE_FREE (mName);\r
- BUFFER_SAFE_FREE (mGuid);\r
- BUFFER_SAFE_FREE (mId);\r
+ ARRAY_SAFE_FREE (mName);\r
+ ARRAY_SAFE_FREE (mGuid);\r
+ ARRAY_SAFE_FREE (mId);\r
while (mInfoStrList != NULL) {\r
Info = mInfoStrList;\r
mInfoStrList = mInfoStrList->mNext;\r
{\r
SVfrDataField *pField = NULL;\r
\r
- if ((FName == NULL) && (Type == NULL)) {\r
+ if ((FName == NULL) || (Type == NULL)) {\r
return VFR_RETURN_FATAL_ERROR;\r
}\r
\r
if (Guid != NULL) {\r
mGuid = *Guid;\r
} else {\r
- memset (&Guid, 0, sizeof (EFI_GUID));\r
+ memset (&mGuid, 0, sizeof (EFI_GUID));\r
}\r
if (StoreName != NULL) {\r
mVarStoreName = new CHAR8[strlen(StoreName) + 1];\r
if (Guid != NULL) {\r
mGuid = *Guid;\r
} else {\r
- memset (&Guid, 0, sizeof (EFI_GUID));\r
+ memset (&mGuid, 0, sizeof (EFI_GUID));\r
}\r
if (StoreName != NULL) {\r
mVarStoreName = new CHAR8[strlen(StoreName) + 1];\r
)\r
{\r
if (mVarStoreName != NULL) {\r
- delete mVarStoreName;\r
+ delete[] mVarStoreName;\r
}\r
\r
if (mVarStoreType == EFI_VFR_VARSTORE_NAME) {\r
mNameVarStoreList = NULL;\r
mCurrVarStorageNode = NULL;\r
mNewVarStorageNode = NULL;\r
+ mBufferFieldInfoListHead = NULL;\r
+ mBufferFieldInfoListTail = NULL;\r
}\r
\r
CVfrDataStorage::~CVfrDataStorage (\r
}\r
}\r
\r
+ if (Index == EFI_FREE_VARSTORE_ID_BITMAP_SIZE) {\r
+ return EFI_VARSTORE_ID_INVALID;\r
+ }\r
+\r
for (Offset = 0, Mask = 0x80000000; Mask != 0; Mask >>= 1, Offset++) {\r
if ((mFreeVarStoreIdBitMap[Index] & Mask) == 0) {\r
mFreeVarStoreIdBitMap[Index] |= Mask;\r
return VFR_RETURN_SUCCESS;\r
}\r
\r
+EFI_VFR_RETURN_CODE\r
+CVfrDataStorage::AddBufferVarStoreFieldInfo (\r
+ IN EFI_VARSTORE_INFO *Info\r
+ )\r
+{\r
+ BufferVarStoreFieldInfoNode *pNew;\r
+\r
+ if ((pNew = new BufferVarStoreFieldInfoNode(Info)) == NULL) {\r
+ return VFR_RETURN_FATAL_ERROR;\r
+ }\r
+\r
+ if (mBufferFieldInfoListHead == NULL) {\r
+ mBufferFieldInfoListHead = pNew;\r
+ mBufferFieldInfoListTail= pNew;\r
+ } else {\r
+ mBufferFieldInfoListTail->mNext = pNew;\r
+ mBufferFieldInfoListTail = pNew;\r
+ }\r
+\r
+ return VFR_RETURN_SUCCESS;\r
+}\r
+\r
+EFI_VFR_RETURN_CODE\r
+CVfrDataStorage::GetBufferVarStoreFieldInfo (\r
+ IN OUT EFI_VARSTORE_INFO *Info\r
+ )\r
+{\r
+ BufferVarStoreFieldInfoNode *pNode;\r
+\r
+ pNode = mBufferFieldInfoListHead;\r
+ while (pNode != NULL) {\r
+ if (Info->mVarStoreId == pNode->mVarStoreInfo.mVarStoreId &&\r
+ Info->mInfo.mVarOffset == pNode->mVarStoreInfo.mInfo.mVarOffset) {\r
+ Info->mVarTotalSize = pNode->mVarStoreInfo.mVarTotalSize;\r
+ Info->mVarType = pNode->mVarStoreInfo.mVarType;\r
+ return VFR_RETURN_SUCCESS;\r
+ }\r
+ pNode = pNode->mNext;\r
+ }\r
+ return VFR_RETURN_FATAL_ERROR;\r
+}\r
+\r
EFI_VFR_RETURN_CODE\r
CVfrDataStorage::GetNameVarStoreInfo (\r
OUT EFI_VARSTORE_INFO *Info,\r
)\r
{\r
if (mRefName != NULL) {\r
- delete mRefName;\r
+ delete[] mRefName;\r
}\r
}\r
\r
)\r
{\r
if (mRuleName != NULL) {\r
- delete mRuleName;\r
+ delete[] mRuleName;\r
}\r
}\r
\r
mVarTotalSize = Info.mVarTotalSize;\r
}\r
\r
+EFI_VARSTORE_INFO&\r
+EFI_VARSTORE_INFO::operator= (\r
+ IN CONST EFI_VARSTORE_INFO &Info\r
+ )\r
+{\r
+ if (this != &Info) {\r
+ mVarStoreId = Info.mVarStoreId;\r
+ mInfo.mVarName = Info.mInfo.mVarName;\r
+ mInfo.mVarOffset = Info.mInfo.mVarOffset;\r
+ mVarType = Info.mVarType;\r
+ mVarTotalSize = Info.mVarTotalSize;\r
+ }\r
+\r
+ return *this;\r
+}\r
+\r
BOOLEAN\r
EFI_VARSTORE_INFO::operator == (\r
IN EFI_VARSTORE_INFO *Info\r
return FALSE;\r
}\r
\r
+BufferVarStoreFieldInfoNode::BufferVarStoreFieldInfoNode(\r
+ IN EFI_VARSTORE_INFO *Info\r
+ )\r
+{\r
+ mVarStoreInfo.mVarType = Info->mVarType;\r
+ mVarStoreInfo.mVarTotalSize = Info->mVarTotalSize;\r
+ mVarStoreInfo.mInfo.mVarOffset = Info->mInfo.mVarOffset;\r
+ mVarStoreInfo.mVarStoreId = Info->mVarStoreId;\r
+ mNext = NULL;\r
+}\r
+\r
+BufferVarStoreFieldInfoNode::~BufferVarStoreFieldInfoNode ()\r
+{\r
+ mVarStoreInfo.mVarType = EFI_IFR_TYPE_OTHER;\r
+ mVarStoreInfo.mVarTotalSize = 0;\r
+ mVarStoreInfo.mInfo.mVarOffset = EFI_VAROFFSET_INVALID;\r
+ mVarStoreInfo.mVarStoreId = EFI_VARSTORE_ID_INVALID;\r
+ mNext = NULL;\r
+}\r
+\r
static EFI_VARSTORE_INFO gEfiInvalidVarStoreInfo;\r
\r
EFI_QUESTION_ID\r
}\r
}\r
\r
+ if (Index == EFI_FREE_QUESTION_ID_BITMAP_SIZE) {\r
+ return EFI_QUESTION_ID_INVALID;\r
+ }\r
+\r
for (Offset = 0, Mask = 0x80000000; Mask != 0; Mask >>= 1, Offset++) {\r
if ((mFreeQIdBitMap[Index] & Mask) == 0) {\r
mFreeQIdBitMap[Index] |= Mask;\r
)\r
{\r
if (mName != NULL) {\r
- delete mName;\r
+ delete[] mName;\r
}\r
\r
if (mVarIdStr != NULL) {\r
- delete mVarIdStr;\r
+ delete[] mVarIdStr;\r
}\r
}\r
\r
// Check the String package.\r
//\r
if (PkgHeader->Header.Type != EFI_HII_PACKAGE_STRINGS) {\r
- delete StringPtr;\r
+ delete[] StringPtr;\r
return NULL;\r
}\r
\r
//\r
Status = FindStringBlock(Current, StringId, &NameOffset, &BlockType);\r
if (Status != EFI_SUCCESS) {\r
- delete StringPtr;\r
+ delete[] StringPtr;\r
return NULL;\r
}\r
\r
break;\r
}\r
\r
- delete StringPtr;\r
+ delete[] StringPtr;\r
\r
return VarStoreName;\r
}\r
BOOLEAN VfrCompatibleMode = FALSE;\r
\r
CVfrVarDataTypeDB gCVfrVarDataTypeDB;\r
+CVfrDefaultStore gCVfrDefaultStore;\r
+CVfrDataStorage gCVfrDataStorage;\r
\r
\r