EFI_STATUS\r
EFIAPI\r
FileInterfaceEnvRead(\r
- IN EFI_FILE_PROTOCOL *This,\r
- IN OUT UINTN *BufferSize,\r
- OUT VOID *Buffer\r
+ IN EFI_FILE_PROTOCOL *This,\r
+ IN OUT UINTN *BufferSize,\r
+ OUT VOID *Buffer\r
)\r
{\r
- return (SHELL_GET_ENVIRONMENT_VARIABLE(\r
- ((EFI_FILE_PROTOCOL_ENVIRONMENT*)This)->Name,\r
- BufferSize,\r
- Buffer));\r
+ EFI_STATUS Status;\r
+\r
+ *BufferSize = *BufferSize / sizeof (CHAR16) * sizeof (CHAR16);\r
+ if (*BufferSize != 0) {\r
+ //\r
+ // Make sure the first unicode character is \xFEFF\r
+ //\r
+ *(CHAR16 *)Buffer = gUnicodeFileTag;\r
+ Buffer = (CHAR16 *)Buffer + 1;\r
+ *BufferSize -= sizeof (gUnicodeFileTag);\r
+ }\r
+\r
+ Status = SHELL_GET_ENVIRONMENT_VARIABLE (\r
+ ((EFI_FILE_PROTOCOL_ENVIRONMENT*)This)->Name,\r
+ BufferSize,\r
+ Buffer\r
+ );\r
+ if (!EFI_ERROR (Status) || (Status == EFI_BUFFER_TOO_SMALL)) {\r
+ //\r
+ // BufferSize is valid and needs update when Status is Success or BufferTooSmall.\r
+ //\r
+ *BufferSize += sizeof (gUnicodeFileTag);\r
+ }\r
+ return Status;\r
}\r
\r
/**\r