mirror of https://github.com/acidanthera/audk.git
ShellPkg: UpdateStdInStdOutStdErr(): append BOM to new unicode file
The >> operator redirects stdout to a file, using append mode and unicode encoding. Write the BOM when redirection happens to a new file (which starts out empty). This makes the >> operator behave similarly to the > operator, when the redirection target doesn't exist originally: OutUnicode && OutAppend && FileSize == 0 // >> to new unicode file vs. OutUnicode && !OutAppend // > to any unicode file (Note that (FileSize == 0) is equivalent to "new file" in this context, due to the earlier "Check that filetypes (Unicode/Ascii) do not change during an append".) Reported-by: Lowell Dennis <Lowell_Dennis@Dell.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Jaben Carsey <Jaben.carsey@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15725 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
94c2a04449
commit
5967886d58
|
@ -1111,12 +1111,18 @@ UpdateStdInStdOutStdErr(
|
|||
} else if (!OutAppend && OutUnicode && !EFI_ERROR(Status)) {
|
||||
Status = WriteFileTag (TempHandle);
|
||||
} else if (OutAppend) {
|
||||
//
|
||||
// Move to end of file
|
||||
//
|
||||
Status = ShellInfoObject.NewEfiShellProtocol->GetFileSize(TempHandle, &FileSize);
|
||||
if (!EFI_ERROR(Status)) {
|
||||
Status = ShellInfoObject.NewEfiShellProtocol->SetFilePosition(TempHandle, FileSize);
|
||||
//
|
||||
// When appending to a new unicode file, write the file tag.
|
||||
// Otherwise (ie. when appending to a new ASCII file, or an
|
||||
// existent file with any encoding), just seek to the end.
|
||||
//
|
||||
Status = (FileSize == 0 && OutUnicode) ?
|
||||
WriteFileTag (TempHandle) :
|
||||
ShellInfoObject.NewEfiShellProtocol->SetFilePosition (
|
||||
TempHandle,
|
||||
FileSize);
|
||||
}
|
||||
}
|
||||
if (!OutUnicode && !EFI_ERROR(Status)) {
|
||||
|
|
Loading…
Reference in New Issue