+\r
/**@file\r
This file contains functions related to Config Access Protocols installed by\r
by HII Thunk Modules which is used to thunk UEFI Config Access Callback to \r
BUFFER_STORAGE_ENTRY *BufferStorageEntry;\r
LIST_ENTRY *Link;\r
EFI_STATUS Status;\r
+ UINTN Size;\r
+ UINTN StringSize;\r
+ EFI_STRING String;\r
+\r
+ String = NULL;\r
\r
Link = GetFirstNode (&ConfigAccess->BufferStorageListHead);\r
if (IsNull (&ConfigAccess->BufferStorageListHead, Link)) {\r
return NULL;\r
}\r
- \r
- IfrDataArray = AllocateZeroPool (0x100);\r
+\r
+ switch (Type) {\r
+ case EFI_IFR_TYPE_NUM_SIZE_8:\r
+ case EFI_IFR_TYPE_NUM_SIZE_16:\r
+ case EFI_IFR_TYPE_NUM_SIZE_32:\r
+ case EFI_IFR_TYPE_NUM_SIZE_64:\r
+ case EFI_IFR_TYPE_BOOLEAN:\r
+ Size = sizeof (*Value);\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_STRING:\r
+ StringSize = 0;\r
+ Status = HiiLibGetString (ConfigAccess->ThunkContext->UefiHiiHandle, Value->string, String, &StringSize);\r
+ ASSERT (Status == EFI_BUFFER_TOO_SMALL);\r
+\r
+ String = AllocateZeroPool (StringSize);\r
+ ASSERT (String != NULL);\r
+\r
+ Status = HiiLibGetString (ConfigAccess->ThunkContext->UefiHiiHandle, Value->string, String, &StringSize);\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ Size = StringSize;\r
+ break;\r
+ \r
+ default:\r
+ ASSERT (FALSE);\r
+ Size = 0;\r
+ break;\r
+ }\r
+\r
+ IfrDataArray = AllocateZeroPool (sizeof (FRAMEWORK_EFI_IFR_DATA_ARRAY) + sizeof (FRAMEWORK_EFI_IFR_DATA_ENTRY) + Size);\r
ASSERT (IfrDataArray != NULL);\r
\r
BufferStorageEntry = BUFFER_STORAGE_ENTRY_FROM_LINK(Link);\r
CopyMem (&IfrDataEntry->Data, &(Value->u8), sizeof (*Value));\r
break;\r
\r
+ case EFI_IFR_TYPE_STRING:\r
+ ASSERT (String != NULL);\r
+ StrCpy ((CHAR16 *) &IfrDataEntry->Data, String);\r
+ FreePool (String);\r
+ break;\r
default:\r
ASSERT (FALSE);\r
break;\r