ASSERT (!((ExtendedData == NULL) && (ExtendedDataSize != 0)));\r
ASSERT (!((ExtendedData != NULL) && (ExtendedDataSize == 0)));\r
\r
- if (mHaveExitedBootServices) {\r
- if (sizeof (EFI_STATUS_CODE_DATA) + ExtendedDataSize > MAX_EXTENDED_DATA_SIZE) {\r
+ if (ExtendedDataSize <= (MAX_EXTENDED_DATA_SIZE - sizeof (EFI_STATUS_CODE_DATA))) {\r
+ //\r
+ // Use Buffer instead of allocating if possible.\r
+ //\r
+ StatusCodeData = (EFI_STATUS_CODE_DATA *) StatusCodeBuffer;\r
+ } else {\r
+ if (mHaveExitedBootServices) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
- StatusCodeData = (EFI_STATUS_CODE_DATA *) StatusCodeBuffer;\r
- } else {\r
+\r
if (gBS == NULL || gBS->AllocatePool == NULL || gBS->FreePool == NULL) {\r
return EFI_UNSUPPORTED;\r
}\r
//\r
// Free the allocated buffer\r
//\r
- if (!mHaveExitedBootServices) {\r
+ if (StatusCodeData != (EFI_STATUS_CODE_DATA *) StatusCodeBuffer) {\r
gBS->FreePool (StatusCodeData);\r
}\r
\r