From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-it0-x22a.google.com (mail-it0-x22a.google.com [IPv6:2607:f8b0:4001:c0b::22a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 9F28F81EE0 for ; Tue, 28 Feb 2017 00:12:14 -0800 (PST) Received: by mail-it0-x22a.google.com with SMTP id y135so4599011itc.1 for ; Tue, 28 Feb 2017 00:12:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=7jmNpOXzATVb3DH4ZgMv4JD1KS+FkL3rZ9Q3acTphGw=; b=ao6plY0BqoUn4z06/+AEnKwQxfwIMHw+RXW3J1izjHbjtzGhr8aQEKlUPWoEgA1DfH sBSIKcMYzBksRoHSTZRofKje6xQAXT0LESAcA8ya0XUy2AWjTFwEKpvuakCzvxZizKf6 n5bmQ6FJ2H01YilRH9DmhruF4uuFo+Y3kBz9E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=7jmNpOXzATVb3DH4ZgMv4JD1KS+FkL3rZ9Q3acTphGw=; b=fKqkmNx/vnxC50SNxQHhKb8JKIhnZuc+KCwizXqZUN6wCBlBdeKwg4YhcdtYZVnrkJ lKHOFk/Mm6Id+r54L7FUobrkd/f4SXMF3fkupPHArldEkOmoP2RPbiWG2llOFsxOuLLe qAsVPwTPqUMFb1lRRmMYWCezQlmbkYcQ+a2hWf1N3P/X77qMgul05rmqU5ZwD7HYvD5t 9GziQ1fY3lL7I3vxYwDWyc6OckDQEwvY9/8pC00iir1xYfPweaUjKGVuvyT3LNM6S1o0 Bck6lF4dg/bjimNGJeas8h3MhP5OZwyudQt6SKUGPxBFIbF3TZJSf5STrSr+GPZuld5r V6Rw== X-Gm-Message-State: AMke39npR/mgQ54/1GqPFUuVzy/s2uRlRMHtaHv9QuH6tmj/niMUDu8KQgOAdiyghQWFCRKQUABOtReHfHIW5IMu X-Received: by 10.36.207.212 with SMTP id y203mr1278012itf.63.1488269533818; Tue, 28 Feb 2017 00:12:13 -0800 (PST) MIME-Version: 1.0 Received: by 10.107.10.27 with HTTP; Tue, 28 Feb 2017 00:12:13 -0800 (PST) In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D5B8B8C51@SHSMSX104.ccr.corp.intel.com> References: <20170222074630.545800-1-ruiyu.ni@intel.com> <20170222074630.545800-3-ruiyu.ni@intel.com> <734D49CCEBEEF84792F5B80ED585239D5B8B8C51@SHSMSX104.ccr.corp.intel.com> From: Ard Biesheuvel Date: Tue, 28 Feb 2017 08:12:13 +0000 Message-ID: To: "Ni, Ruiyu" Cc: "Carsey, Jaben" , "edk2-devel@lists.01.org" , "Chen, Chen A" Subject: Re: [PATCH 2/2] ShellPkg/comp: Add "-n "/"-s " support X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 28 Feb 2017 08:12:14 -0000 Content-Type: text/plain; charset=UTF-8 On 28 February 2017 at 08:06, Ni, Ruiyu wrote: > Thanks for the reporting. > Just fixed it. > Thanks for the quick fix >> -----Original Message----- >> From: Ard Biesheuvel [mailto:ard.biesheuvel@linaro.org] >> Sent: Tuesday, February 28, 2017 3:39 PM >> To: Carsey, Jaben >> Cc: Ni, Ruiyu ; edk2-devel@lists.01.org; Chen, Chen A >> >> Subject: Re: [edk2] [PATCH 2/2] ShellPkg/comp: Add "-n "/"-s >> " support >> >> On 27 February 2017 at 16:36, Carsey, Jaben >> wrote: >> > Reviewed-by: Jaben Carsey >> > >> >> This patch breaks the build on GCC: >> >> > upstream/ws/edk2/ShellPkg/Library/UefiShellDebug1CommandsLib/Comp.c >> >: >> In function 'ShellCommandRunComp': >> > upstream/ws/edk2/ShellPkg/Library/UefiShellDebug1CommandsLib/Comp.c >> >:328:36: >> error: 'DiffPointAddress' may be used uninitialized in this function [- >> Werror=maybe-uninitialized] >> DiffPointAddress += Index; >> >> >> >> -----Original Message----- >> >> From: Ni, Ruiyu >> >> Sent: Tuesday, February 21, 2017 11:47 PM >> >> To: edk2-devel@lists.01.org >> >> Cc: Chen, Chen A ; Carsey, Jaben >> >> >> >> Subject: [PATCH 2/2] ShellPkg/comp: Add "-n "/"-s > byte>" >> >> support >> >> Importance: High >> >> >> >> From: Chen A Chen >> >> >> >> Contributed-under: TianoCore Contribution Agreement 1.0 >> >> Signed-off-by: Chen A Chen >> >> Signed-off-by: Ruiyu Ni >> >> Cc: Jaben Carsey >> >> --- >> >> ShellPkg/Library/UefiShellDebug1CommandsLib/Comp.c | 357 >> >> +++++++++++++-------- >> >> .../UefiShellDebug1CommandsLib.uni | 27 +- >> >> 2 files changed, 229 insertions(+), 155 deletions(-) >> >> >> >> diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Comp.c >> >> b/ShellPkg/Library/UefiShellDebug1CommandsLib/Comp.c >> >> index 829c49a..62b59d7 100644 >> >> --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Comp.c >> >> +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Comp.c >> >> @@ -15,6 +15,71 @@ >> >> >> >> #include "UefiShellDebug1CommandsLib.h" >> >> >> >> +STATIC CONST SHELL_PARAM_ITEM ParamList[] = { >> >> + {L"-n", TypeValue}, >> >> + {L"-s", TypeValue}, >> >> + {NULL, TypeMax} >> >> + }; >> >> + >> >> +typedef enum { >> >> + OutOfDiffPoint, >> >> + InDiffPoint, >> >> + InPrevDiffPoint >> >> +} READ_STATUS; >> >> + >> >> +/** >> >> + Function to print differnt point data. >> >> + >> >> + @param[in] FileName File name >> >> + @param[in] Buffer Data buffer to be printed. >> >> + @param[in] BufferSize Size of the data to be printed. >> >> + @param[in] Address Address of the differnt point. >> >> + @param[in] DifferentBytes Total size of the buffer. >> >> + >> >> +**/ >> >> +VOID >> >> +PrintDifferentPoint( >> >> + CONST CHAR16 *FileName, >> >> + UINT8 *Buffer, >> >> + UINT64 DataSize, >> >> + UINTN Address, >> >> + UINT64 BufferSize >> >> + ) >> >> +{ >> >> + UINTN Index; >> >> + >> >> + ShellPrintEx (-1, -1, L"%s: %s\r\n %08x:", L"File1", FileName, >> >> + Address); >> >> + >> >> + // >> >> + // Print data in hex-format. >> >> + // >> >> + for (Index = 0; Index < DataSize; Index++) { >> >> + ShellPrintEx (-1, -1, L" %02x", Buffer[Index]); } >> >> + >> >> + if (DataSize < BufferSize) { >> >> + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN >> >> + (STR_COMP_END_OF_FILE), >> >> gShellDebug1HiiHandle); >> >> + } >> >> + >> >> + ShellPrintEx (-1, -1, L" *"); >> >> + >> >> + // >> >> + // Print data in char-format. >> >> + // >> >> + for (Index = 0; Index < DataSize; Index++) { >> >> + if (Buffer[Index] >= 0x20 && Buffer[Index] <= 0x7E) { >> >> + ShellPrintEx (-1, -1, L"%c", Buffer[Index]); >> >> + } else { >> >> + // >> >> + // Print dots for control characters >> >> + // >> >> + ShellPrintEx (-1, -1, L"."); >> >> + } >> >> + } >> >> + >> >> + ShellPrintEx (-1, -1, L"*\r\n"); >> >> +} >> >> + >> >> /** >> >> Function for 'comp' command. >> >> >> >> @@ -35,32 +100,41 @@ ShellCommandRunComp ( >> >> CHAR16 *FileName2; >> >> CONST CHAR16 *TempParam; >> >> SHELL_STATUS ShellStatus; >> >> - UINTN LoopVar; >> >> SHELL_FILE_HANDLE FileHandle1; >> >> SHELL_FILE_HANDLE FileHandle2; >> >> - UINT8 DifferentCount; >> >> UINT64 Size1; >> >> UINT64 Size2; >> >> - UINT8 DataFromFile1; >> >> - UINT8 DataFromFile2; >> >> - UINT8 ADF_File11; >> >> - UINT8 ADF_File12; >> >> - UINT8 ADF_File13; >> >> - UINT8 ADF_File21; >> >> - UINT8 ADF_File22; >> >> - UINT8 ADF_File23; >> >> + UINT64 DifferentBytes; >> >> + UINT64 DifferentCount; >> >> + UINT8 DiffPointNumber; >> >> + UINT8 OneByteFromFile1; >> >> + UINT8 OneByteFromFile2; >> >> + UINT8 *DataFromFile1; >> >> + UINT8 *DataFromFile2; >> >> + UINTN InsertPosition1; >> >> + UINTN InsertPosition2; >> >> UINTN DataSizeFromFile1; >> >> UINTN DataSizeFromFile2; >> >> + UINTN TempAddress; >> >> + UINTN Index; >> >> UINTN DiffPointAddress; >> >> + READ_STATUS ReadStatus; >> >> >> >> - DifferentCount = 0; >> >> ShellStatus = SHELL_SUCCESS; >> >> Status = EFI_SUCCESS; >> >> FileName1 = NULL; >> >> FileName2 = NULL; >> >> FileHandle1 = NULL; >> >> FileHandle2 = NULL; >> >> - Size1 = 0; >> >> + DataFromFile1 = NULL; >> >> + DataFromFile2 = NULL; >> >> + ReadStatus = OutOfDiffPoint; >> >> + DifferentCount = 10; >> >> + DifferentBytes = 4; >> >> + DiffPointNumber = 0; >> >> + InsertPosition1 = 0; >> >> + InsertPosition2 = 0; >> >> + TempAddress = 0; >> >> >> >> // >> >> // initialize the shell lib (we must be in non-auto-init...) @@ >> >> -74,7 +148,7 @@ ShellCommandRunComp ( >> >> // >> >> // parse the command line >> >> // >> >> - Status = ShellCommandLineParse (EmptyParamList, &Package, >> >> &ProblemParam, TRUE); >> >> + Status = ShellCommandLineParse (ParamList, &Package, >> >> + &ProblemParam, >> >> TRUE); >> >> if (EFI_ERROR(Status)) { >> >> if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) { >> >> ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), >> >> gShellDebug1HiiHandle, L"comp", ProblemParam); @@ -118,142 +192,165 >> >> @@ ShellCommandRunComp ( >> >> } >> >> } >> >> if (ShellStatus == SHELL_SUCCESS) { >> >> - ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_HEADER), >> >> gShellDebug1HiiHandle, FileName1, FileName2); >> >> Status = gEfiShellProtocol->GetFileSize(FileHandle1, &Size1); >> >> ASSERT_EFI_ERROR(Status); >> >> Status = gEfiShellProtocol->GetFileSize(FileHandle2, &Size2); >> >> ASSERT_EFI_ERROR(Status); >> >> - if (Size1 != Size2) { >> >> - ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_SIZE_FAIL), >> >> gShellDebug1HiiHandle); >> >> - DifferentCount++; >> >> - ShellStatus = SHELL_NOT_EQUAL; >> >> + >> >> + if (ShellCommandLineGetFlag (Package, L"-n")) { >> >> + TempParam = ShellCommandLineGetValue (Package, L"-n"); >> >> + if (TempParam == NULL) { >> >> + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN >> >> + (STR_GEN_NO_VALUE), >> >> gShellDebug1HiiHandle, L"comp", L"-n"); >> >> + ShellStatus = SHELL_INVALID_PARAMETER; >> >> + } else { >> >> + if (gUnicodeCollation->StriColl (gUnicodeCollation, >> >> + (CHAR16 >> >> *)TempParam, L"all") == 0) { >> >> + DifferentCount = MAX_UINTN; >> >> + } else { >> >> + Status = ShellConvertStringToUint64 (TempParam, >> >> + &DifferentCount, >> >> FALSE, TRUE); >> >> + if (EFI_ERROR(Status) || DifferentCount == 0) { >> >> + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN >> >> (STR_GEN_PROBLEM_VAL), gShellDebug1HiiHandle, L"comp", >> TempParam, >> >> L"-n"); >> >> + ShellStatus = SHELL_INVALID_PARAMETER; >> >> + } >> >> + } >> >> + } >> >> + } >> >> + >> >> + if (ShellCommandLineGetFlag (Package, L"-s")) { >> >> + TempParam = ShellCommandLineGetValue (Package, L"-s"); >> >> + if (TempParam == NULL) { >> >> + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN >> >> + (STR_GEN_NO_VALUE), >> >> gShellDebug1HiiHandle, L"comp", L"-s"); >> >> + ShellStatus = SHELL_INVALID_PARAMETER; >> >> + } else { >> >> + Status = ShellConvertStringToUint64 (TempParam, >> >> + &DifferentBytes, >> >> FALSE, TRUE); >> >> + if (EFI_ERROR(Status) || DifferentBytes == 0) { >> >> + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN >> >> (STR_GEN_PROBLEM_VAL), gShellDebug1HiiHandle, L"comp", >> TempParam, >> >> L"-s"); >> >> + ShellStatus = SHELL_INVALID_PARAMETER; >> >> + } else { >> >> + if (DifferentBytes > MAX (Size1, Size2)) { >> >> + DifferentBytes = MAX (Size1, Size2); >> >> + } >> >> + } >> >> + } >> >> } >> >> } >> >> + >> >> if (ShellStatus == SHELL_SUCCESS) { >> >> - for (LoopVar = 0 ; LoopVar < Size1 && DifferentCount <= 10 ; >> LoopVar++) >> >> { >> >> + DataFromFile1 = AllocateZeroPool ((UINTN)DifferentBytes); >> >> + DataFromFile2 = AllocateZeroPool ((UINTN)DifferentBytes); >> >> + if (DataFromFile1 == NULL || DataFromFile2 == NULL) { >> >> + ShellStatus = SHELL_OUT_OF_RESOURCES; >> >> + SHELL_FREE_NON_NULL (DataFromFile1); >> >> + SHELL_FREE_NON_NULL (DataFromFile2); >> >> + } >> >> + } >> >> + >> >> + if (ShellStatus == SHELL_SUCCESS) { >> >> + while (DiffPointNumber < DifferentCount) { >> >> DataSizeFromFile1 = 1; >> >> DataSizeFromFile2 = 1; >> >> - Status = gEfiShellProtocol->ReadFile(FileHandle1, >> &DataSizeFromFile1, >> >> &DataFromFile1); >> >> - ASSERT_EFI_ERROR(Status); >> >> - Status = gEfiShellProtocol->ReadFile(FileHandle2, >> &DataSizeFromFile2, >> >> &DataFromFile2); >> >> - ASSERT_EFI_ERROR(Status); >> >> - if (DataFromFile1 != DataFromFile2) { >> >> - DiffPointAddress = LoopVar; >> >> - ADF_File11 = 0; >> >> - ADF_File12 = 0; >> >> - ADF_File13 = 0; >> >> - ADF_File21 = 0; >> >> - ADF_File22 = 0; >> >> - ADF_File23 = 0; >> >> + OneByteFromFile1 = 0; >> >> + OneByteFromFile2 = 0; >> >> + Status = gEfiShellProtocol->ReadFile (FileHandle1, >> >> + &DataSizeFromFile1, >> >> &OneByteFromFile1); >> >> + ASSERT_EFI_ERROR (Status); >> >> + Status = gEfiShellProtocol->ReadFile (FileHandle2, >> >> + &DataSizeFromFile2, >> >> &OneByteFromFile2); >> >> + ASSERT_EFI_ERROR (Status); >> >> >> >> - // >> >> - // Now check the next 3 bytes if possible. This will make output >> >> - // cleaner when there are a sequence of differences. >> >> - // >> >> - if (LoopVar + 1 < Size1) { >> >> - LoopVar++; >> >> - DataSizeFromFile1 = 1; >> >> - DataSizeFromFile2 = 1; >> >> - Status = gEfiShellProtocol->ReadFile(FileHandle1, >> >> &DataSizeFromFile1, &ADF_File11); >> >> - ASSERT_EFI_ERROR(Status); >> >> - Status = gEfiShellProtocol->ReadFile(FileHandle2, >> >> &DataSizeFromFile2, &ADF_File21); >> >> - ASSERT_EFI_ERROR(Status); >> >> - if (LoopVar + 1 < Size1) { >> >> - LoopVar++; >> >> - DataSizeFromFile1 = 1; >> >> - DataSizeFromFile2 = 1; >> >> - Status = gEfiShellProtocol->ReadFile(FileHandle1, >> >> &DataSizeFromFile1, &ADF_File12); >> >> - ASSERT_EFI_ERROR(Status); >> >> - Status = gEfiShellProtocol->ReadFile(FileHandle2, >> >> &DataSizeFromFile2, &ADF_File22); >> >> - ASSERT_EFI_ERROR(Status); >> >> - if (LoopVar + 1 < Size1) { >> >> - LoopVar++; >> >> - DataSizeFromFile1 = 1; >> >> - DataSizeFromFile2 = 1; >> >> - Status = gEfiShellProtocol->ReadFile(FileHandle1, >> >> &DataSizeFromFile1, &ADF_File13); >> >> - ASSERT_EFI_ERROR(Status); >> >> - Status = gEfiShellProtocol->ReadFile(FileHandle2, >> >> &DataSizeFromFile2, &ADF_File23); >> >> - ASSERT_EFI_ERROR(Status); >> >> - } >> >> + TempAddress++; >> >> + >> >> + // >> >> + // 1.When end of file and no chars in DataFromFile buffer, >> >> + then break >> >> while. >> >> + // 2.If no more char in File1 or File2, The ReadStatus is >> >> + InPrevDiffPoint >> >> forever. >> >> + // So the previous different point is the last one, then break the >> while >> >> block. >> >> + // >> >> + if ( (DataSizeFromFile1 == 0 && InsertPosition1 == 0 && >> >> DataSizeFromFile2 == 0 && InsertPosition2 == 0) || >> >> + (ReadStatus == InPrevDiffPoint && (DataSizeFromFile1 >> >> + == 0 || >> >> DataSizeFromFile2 == 0)) >> >> + ) { >> >> + break; >> >> + } >> >> + >> >> + if (ReadStatus == OutOfDiffPoint) { >> >> + if (OneByteFromFile1 != OneByteFromFile2) { >> >> + ReadStatus = InDiffPoint; >> >> + DiffPointAddress = TempAddress; >> >> + if (DataSizeFromFile1 == 1) { >> >> + DataFromFile1[InsertPosition1++] = OneByteFromFile1; >> >> + } >> >> + if (DataSizeFromFile2 == 1) { >> >> + DataFromFile2[InsertPosition2++] = OneByteFromFile2; >> >> } >> >> } >> >> + } else if (ReadStatus == InDiffPoint) { >> >> + if (DataSizeFromFile1 == 1) { >> >> + DataFromFile1[InsertPosition1++] = OneByteFromFile1; >> >> + } >> >> + if (DataSizeFromFile2 == 1) { >> >> + DataFromFile2[InsertPosition2++] = OneByteFromFile2; >> >> + } >> >> + } else if (ReadStatus == InPrevDiffPoint) { >> >> + if (OneByteFromFile1 == OneByteFromFile2) { >> >> + ReadStatus = OutOfDiffPoint; >> >> + } >> >> + } >> >> + >> >> + // >> >> + // ReadStatus should be always equal InDiffPoint. >> >> + // >> >> + if ( InsertPosition1 == DifferentBytes || >> >> + InsertPosition2 == DifferentBytes || >> >> + (DataSizeFromFile1 == 0 && DataSizeFromFile2 == 0) >> >> + ) { >> >> + >> >> + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN >> >> (STR_COMP_DIFFERENCE_POINT), gShellDebug1HiiHandle, >> >> ++DiffPointNumber); >> >> + PrintDifferentPoint (FileName1, DataFromFile1, >> >> + InsertPosition1, >> >> DiffPointAddress, DifferentBytes); >> >> + PrintDifferentPoint (FileName2, DataFromFile2, >> >> + InsertPosition2, >> >> DiffPointAddress, DifferentBytes); >> >> >> >> // >> >> - // Print out based on highest of the 4 bytes that are different. >> >> + // One of two buffuers is empty, it means this is the >> >> + last different >> >> point. >> >> // >> >> - if (ADF_File13 != ADF_File23) { >> >> - ShellPrintHiiEx( >> >> - -1, >> >> - -1, >> >> - NULL, >> >> - STRING_TOKEN (STR_COMP_SPOT_FAIL4), >> >> - gShellDebug1HiiHandle, >> >> - ++DifferentCount, >> >> - FileName1, >> >> - DiffPointAddress, >> >> - DataFromFile1, ADF_File11, ADF_File12, ADF_File13, >> >> - DataFromFile1, ADF_File11, ADF_File12, ADF_File13, >> >> - FileName2, >> >> - DiffPointAddress, >> >> - DataFromFile2, ADF_File21, ADF_File22, ADF_File23, >> >> - DataFromFile2, ADF_File21, ADF_File22, ADF_File23 >> >> - ); >> >> - } else if (ADF_File12 != ADF_File22) { >> >> - ShellPrintHiiEx( >> >> - -1, >> >> - -1, >> >> - NULL, >> >> - STRING_TOKEN (STR_COMP_SPOT_FAIL3), >> >> - gShellDebug1HiiHandle, >> >> - ++DifferentCount, >> >> - FileName1, >> >> - DiffPointAddress, >> >> - DataFromFile1, ADF_File11, ADF_File12, >> >> - DataFromFile1, ADF_File11, ADF_File12, >> >> - FileName2, >> >> - DiffPointAddress, >> >> - DataFromFile2, ADF_File21, ADF_File22, >> >> - DataFromFile2, ADF_File21, ADF_File22 >> >> - ); >> >> - } else if (ADF_File11 != ADF_File21) { >> >> - ShellPrintHiiEx( >> >> - -1, >> >> - -1, >> >> - NULL, >> >> - STRING_TOKEN (STR_COMP_SPOT_FAIL2), >> >> - gShellDebug1HiiHandle, >> >> - ++DifferentCount, >> >> - FileName1, >> >> - DiffPointAddress, >> >> - DataFromFile1, ADF_File11, >> >> - DataFromFile1, ADF_File11, >> >> - FileName2, >> >> - DiffPointAddress, >> >> - DataFromFile2, ADF_File21, >> >> - DataFromFile2, ADF_File21 >> >> - ); >> >> + if (InsertPosition1 == 0 || InsertPosition2 == 0) { >> >> + break; >> >> + } >> >> + >> >> + for (Index = 1; Index < InsertPosition1 && Index < >> >> + InsertPosition2; >> >> Index++) { >> >> + if (DataFromFile1[Index] == DataFromFile2[Index]) { >> >> + ReadStatus = OutOfDiffPoint; >> >> + break; >> >> + } >> >> + } >> >> + >> >> + if (ReadStatus == OutOfDiffPoint) { >> >> + // >> >> + // Try to find a new different point in the rest of DataFromFile. >> >> + // >> >> + for (; Index < MAX (InsertPosition1,InsertPosition2); Index++) { >> >> + if (DataFromFile1[Index] != DataFromFile2[Index]) { >> >> + ReadStatus = InDiffPoint; >> >> + DiffPointAddress += Index; >> >> + break; >> >> + } >> >> + } >> >> } else { >> >> - ShellPrintHiiEx( >> >> - -1, >> >> - -1, >> >> - NULL, >> >> - STRING_TOKEN (STR_COMP_SPOT_FAIL1), >> >> - gShellDebug1HiiHandle, >> >> - ++DifferentCount, >> >> - FileName1, >> >> - DiffPointAddress, >> >> - DataFromFile1, >> >> - DataFromFile1, >> >> - FileName2, >> >> - DiffPointAddress, >> >> - DataFromFile2, >> >> - DataFromFile2 >> >> - ); >> >> + // >> >> + // Doesn't find a new different point, still in the same different >> point. >> >> + // >> >> + ReadStatus = InPrevDiffPoint; >> >> } >> >> - ShellStatus = SHELL_NOT_EQUAL; >> >> + >> >> + CopyMem (DataFromFile1, DataFromFile1 + Index, >> >> + InsertPosition1 - >> >> Index); >> >> + CopyMem (DataFromFile2, DataFromFile2 + Index, >> >> + InsertPosition2 - >> >> Index); >> >> + >> >> + SetMem (DataFromFile1 + InsertPosition1 - Index, >> >> (UINTN)DifferentBytes - InsertPosition1 + Index, 0); >> >> + SetMem (DataFromFile2 + InsertPosition2 - Index, >> >> (UINTN)DifferentBytes - InsertPosition2 + Index, 0); >> >> + >> >> + InsertPosition1 -= Index; >> >> + InsertPosition2 -= Index; >> >> } >> >> } >> >> - if (DifferentCount == 0) { >> >> + >> >> + SHELL_FREE_NON_NULL (DataFromFile1); >> >> + SHELL_FREE_NON_NULL (DataFromFile2); >> >> + >> >> + if (DiffPointNumber == 0) { >> >> ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN >> >> (STR_COMP_FOOTER_PASS), gShellDebug1HiiHandle); >> >> } else { >> >> ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN >> >> (STR_COMP_FOOTER_FAIL), gShellDebug1HiiHandle); diff --git >> >> >> a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1Comman >> >> dsLib.uni >> >> >> b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1Comman >> >> dsLib.uni >> >> index 7c0ca98..2d5d16f 100644 >> >> --- >> >> >> a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1Comman >> >> dsLib.uni >> >> +++ >> >> >> b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1Comman >> >> dsLib.uni >> >> @@ -65,31 +65,8 @@ >> >> #string STR_DBLK_HEADER #language en-US "LBA %016LX Size %08x >> >> bytes BlkIo %0x\r\n" >> >> >> >> #string STR_COMP_HEADER #language en-US "Compare %s >> to %s.\r\n" >> >> -#string STR_COMP_SIZE_FAIL #language en-US "Difference # 1: File >> size >> >> mismatch.\r\n" >> >> -#string STR_COMP_SPOT_FAIL1 #language en-US "" >> >> - "Difference #% 2d:\r\n" >> >> - "File1: %s\r\n" >> >> - " %08x: %02x *%c*\r\n" >> >> - "File2: %s\r\n" >> >> - " %08x: %02x *%c*\r\n" >> >> -#string STR_COMP_SPOT_FAIL2 #language en-US "" >> >> - "Difference #% 2d:\r\n" >> >> - "File1: %s\r\n" >> >> - " %08x: %02x %02x *%c%c*\r\n" >> >> - "File2: %s\r\n" >> >> - " %08x: %02x %02x *%c%c*\r\n" >> >> -#string STR_COMP_SPOT_FAIL3 #language en-US "" >> >> - "Difference #% 2d:\r\n" >> >> - "File1: %s\r\n" >> >> - " %08x: %02x %02x %02x >> >> *%c%c%c*\r\n" >> >> - "File2: %s\r\n" >> >> - " %08x: %02x %02x %02x >> >> *%c%c%c*\r\n" >> >> -#string STR_COMP_SPOT_FAIL4 #language en-US "" >> >> - "Difference #% 2d:\r\n" >> >> - "File1: %s\r\n" >> >> - " %08x: %02x %02x %02x %02x >> >> *%c%c%c%c*\r\n" >> >> - "File2: %s\r\n" >> >> - " %08x: %02x %02x %02x %02x >> >> *%c%c%c%c*\r\n" >> >> +#string STR_COMP_DIFFERENCE_POINT #language en-US "Difference #% >> >> 2u:\r\n" >> >> +#string STR_COMP_END_OF_FILE #language en-US " " >> >> >> >> #string STR_COMP_FOOTER_FAIL #language en-US "[difference(s) >> >> encountered] \r\n" >> >> #string STR_COMP_FOOTER_PASS #language en-US "[no differences >> >> encountered]\r\n" >> >> -- >> >> 2.9.0.windows.1 >> > >> > _______________________________________________ >> > edk2-devel mailing list >> > edk2-devel@lists.01.org >> > https://lists.01.org/mailman/listinfo/edk2-devel