From f8a6b28205512647b04dbdb698b9cf063fe6b962 Mon Sep 17 00:00:00 2001 From: qhuang8 Date: Wed, 3 Sep 2008 05:10:55 +0000 Subject: 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 --- EdkShellPkg/ShellHotFix.patch | 59 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'EdkShellPkg/ShellHotFix.patch') diff --git a/EdkShellPkg/ShellHotFix.patch b/EdkShellPkg/ShellHotFix.patch index fb05c754d4..46a95d8841 100644 --- a/EdkShellPkg/ShellHotFix.patch +++ b/EdkShellPkg/ShellHotFix.patch @@ -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) -- cgit v1.2.3