mirror of https://github.com/acidanthera/audk.git
ShellPkg/redirection: Insert \xFEFF for ENV variable redirection
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1080 Per Shell spec 2.2 chapter 3.4.4.2, Unicode file tag should be inserted in the output from the input redirected variable, to ensure it looks like a UCS-2 encode file. The patch fixes this issue. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
This commit is contained in:
parent
bc0d3e2912
commit
52047be024
|
@ -1148,15 +1148,35 @@ FileInterfaceEnvDelete(
|
|||
EFI_STATUS
|
||||
EFIAPI
|
||||
FileInterfaceEnvRead(
|
||||
IN EFI_FILE_PROTOCOL *This,
|
||||
IN OUT UINTN *BufferSize,
|
||||
OUT VOID *Buffer
|
||||
IN EFI_FILE_PROTOCOL *This,
|
||||
IN OUT UINTN *BufferSize,
|
||||
OUT VOID *Buffer
|
||||
)
|
||||
{
|
||||
return (SHELL_GET_ENVIRONMENT_VARIABLE(
|
||||
((EFI_FILE_PROTOCOL_ENVIRONMENT*)This)->Name,
|
||||
BufferSize,
|
||||
Buffer));
|
||||
EFI_STATUS Status;
|
||||
|
||||
*BufferSize = *BufferSize / sizeof (CHAR16) * sizeof (CHAR16);
|
||||
if (*BufferSize != 0) {
|
||||
//
|
||||
// Make sure the first unicode character is \xFEFF
|
||||
//
|
||||
*(CHAR16 *)Buffer = gUnicodeFileTag;
|
||||
Buffer = (CHAR16 *)Buffer + 1;
|
||||
*BufferSize -= sizeof (gUnicodeFileTag);
|
||||
}
|
||||
|
||||
Status = SHELL_GET_ENVIRONMENT_VARIABLE (
|
||||
((EFI_FILE_PROTOCOL_ENVIRONMENT*)This)->Name,
|
||||
BufferSize,
|
||||
Buffer
|
||||
);
|
||||
if (!EFI_ERROR (Status) || (Status == EFI_BUFFER_TOO_SMALL)) {
|
||||
//
|
||||
// BufferSize is valid and needs update when Status is Success or BufferTooSmall.
|
||||
//
|
||||
*BufferSize += sizeof (gUnicodeFileTag);
|
||||
}
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue