UINTN BytesPerPixel;\r
UINTN WidthInPixels;\r
UINTN Height;\r
- UINT8 LineBuffer[SIZE_4KB * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)];\r
UINT8 *FrameBuffer;\r
EFI_GRAPHICS_PIXEL_FORMAT PixelFormat;\r
EFI_PIXEL_BITMASK PixelMasks;\r
INT8 PixelShl[4]; // R-G-B-Rsvd\r
INT8 PixelShr[4]; // R-G-B-Rsvd\r
+ UINT8 LineBuffer[0];\r
};\r
\r
CONST EFI_PIXEL_BITMASK mRgbPixelMasks = {\r
return RETURN_INVALID_PARAMETER;\r
}\r
\r
- if (*ConfigureSize < sizeof (FRAME_BUFFER_CONFIGURE)) {\r
- *ConfigureSize = sizeof (FRAME_BUFFER_CONFIGURE);\r
- return RETURN_BUFFER_TOO_SMALL;\r
- }\r
-\r
- if (Configure == NULL) {\r
- return RETURN_INVALID_PARAMETER;\r
- }\r
-\r
switch (FrameBufferInfo->PixelFormat) {\r
case PixelRedGreenBlueReserved8BitPerColor:\r
BitMask = &mRgbPixelMasks;\r
\r
FrameBufferBltLibConfigurePixelFormat (BitMask, &BytesPerPixel, PixelShl, PixelShr);\r
\r
+ if (*ConfigureSize < sizeof (FRAME_BUFFER_CONFIGURE)\r
+ + FrameBufferInfo->HorizontalResolution * BytesPerPixel) {\r
+ *ConfigureSize = sizeof (FRAME_BUFFER_CONFIGURE)\r
+ + FrameBufferInfo->HorizontalResolution * BytesPerPixel;\r
+ return RETURN_BUFFER_TOO_SMALL;\r
+ }\r
+\r
+ if (Configure == NULL) {\r
+ return RETURN_INVALID_PARAMETER;\r
+ }\r
+\r
CopyMem (&Configure->PixelMasks, BitMask, sizeof (*BitMask));\r
CopyMem (Configure->PixelShl, PixelShl, sizeof (PixelShl));\r
CopyMem (Configure->PixelShr, PixelShr, sizeof (PixelShr));\r
Configure->Height = (UINTN) FrameBufferInfo->VerticalResolution;\r
Configure->WidthInBytes = Configure->WidthInPixels * Configure->BytesPerPixel;\r
\r
- ASSERT (Configure->WidthInBytes < sizeof (Configure->LineBuffer));\r
-\r
return RETURN_SUCCESS;\r
}\r
\r