Update Shell hot fix patch to integrate a fix to solve "CHAR8" compatibility issue in Edit command and shell script execution.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5783 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qhuang8
2008-09-03 05:10:55 +00:00
parent fc952584eb
commit f8a6b28205
2 changed files with 60 additions and 1 deletions

View File

@@ -163,6 +163,28 @@ Index: drivers/drivers.c
ShellCloseHandleEnumerator ();
LibCheckVarFreeVarList (&ChkPck);
LibUnInitializeStrings ();
Index: edit/libFileBuffer.c
===================================================================
--- edit/libFileBuffer.c (revision 30)
+++ edit/libFileBuffer.c (working copy)
@@ -735,7 +735,7 @@
UINTN LineSize;
VOID *Buffer;
CHAR16 *UnicodeBuffer;
- CHAR8 *AsciiBuffer;
+ UINT8 *AsciiBuffer;
UINTN FileSize;
EFI_FILE_HANDLE Handle;
BOOLEAN CreateFile;
@@ -1047,7 +1047,7 @@
//
// Unicode file
//
- if (AsciiBuffer[0] == 0xff && AsciiBuffer[1] == 0xfe) {
+ if ((FileSize >= 2) && (*((UINT16 *) Buffer) == EFI_UNICODE_BYTE_ORDER_MARK)) {
//
// Unicode file's size should be even
//
Index: Library/EfiShellLib.h
===================================================================
--- Library/EfiShellLib.h (revision 30)
@@ -315,6 +337,43 @@ Index: Library/Misc.c
+
+
+
Index: shellenv/batch.c
===================================================================
--- shellenv/batch.c (revision 30)
+++ shellenv/batch.c (working copy)
@@ -2074,17 +2074,17 @@
--*/
{
//
- // UNICODE byte-order-mark is two bytes
+ // UNICODE byte-order-mark is 16 bits
//
- CHAR8 Buffer8[2];
+ UINT16 Uint16;
UINTN BufSize;
EFI_STATUS Status;
//
// Read the first two bytes to check for byte order mark
//
- BufSize = sizeof (Buffer8);
- Status = File->Read (File, &BufSize, Buffer8);
+ BufSize = sizeof (Uint16);
+ Status = File->Read (File, &BufSize, &Uint16);
if (EFI_ERROR (Status)) {
return Status;
}
@@ -2098,9 +2098,8 @@
// otherwise assume it is ASCII. UNICODE byte order mark on
// IA little endian is first byte 0xff and second byte 0xfe
//
- if ((Buffer8[0] | (Buffer8[1] << 8)) == EFI_UNICODE_BYTE_ORDER_MARK) {
+ if ((BufSize == 2) && (Uint16 == EFI_UNICODE_BYTE_ORDER_MARK)) {
*IsAscii = FALSE;
-
} else {
*IsAscii = TRUE;
}
Index: SmbiosView/PrintInfo.c
===================================================================
--- SmbiosView/PrintInfo.c (revision 30)