From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id C7DF681F3A for ; Mon, 27 Feb 2017 08:36:51 -0800 (PST) Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Feb 2017 08:36:51 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.35,215,1484035200"; d="scan'208";a="230237691" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga004.fm.intel.com with ESMTP; 27 Feb 2017 08:36:50 -0800 Received: from fmsmsx124.amr.corp.intel.com (10.18.125.39) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 27 Feb 2017 08:36:50 -0800 Received: from fmsmsx103.amr.corp.intel.com ([169.254.2.47]) by fmsmsx124.amr.corp.intel.com ([169.254.8.130]) with mapi id 14.03.0248.002; Mon, 27 Feb 2017 08:36:50 -0800 From: "Carsey, Jaben" To: "Ni, Ruiyu" , "edk2-devel@lists.01.org" CC: "Chen, Chen A" , "Carsey, Jaben" Thread-Topic: [PATCH 2/2] ShellPkg/comp: Add "-n "/"-s " support Thread-Index: AQHSjN/dFJgCM4RUeEW0CaTPRhpzPaF9FWXQ Date: Mon, 27 Feb 2017 16:36:49 +0000 Message-ID: References: <20170222074630.545800-1-ruiyu.ni@intel.com> <20170222074630.545800-3-ruiyu.ni@intel.com> In-Reply-To: <20170222074630.545800-3-ruiyu.ni@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNzk3MzQ5NDEtMTI0OS00ZjI2LWIyMDktODdlNDUxYzllYjA2IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6InNESm93anlXMlR2YU53T2xhYTA5U0pNNWx3bjF6K3NWelpaWWJ5Vit6c0k9In0= x-ctpclassification: CTP_IC x-originating-ip: [10.1.200.107] MIME-Version: 1.0 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: Mon, 27 Feb 2017 16:36:52 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Jaben Carsey > -----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 = " > support > Importance: High >=20 > From: Chen A Chen >=20 > 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(-) >=20 > 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 @@ >=20 > #include "UefiShellDebug1CommandsLib.h" >=20 > +STATIC CONST SHELL_PARAM_ITEM ParamList[] =3D { > + {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, Addres= s); > + > + // > + // Print data in hex-format. > + // > + for (Index =3D 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 =3D 0; Index < DataSize; Index++) { > + if (Buffer[Index] >=3D 0x20 && Buffer[Index] <=3D 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. >=20 > @@ -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; >=20 > - DifferentCount =3D 0; > ShellStatus =3D SHELL_SUCCESS; > Status =3D EFI_SUCCESS; > FileName1 =3D NULL; > FileName2 =3D NULL; > FileHandle1 =3D NULL; > FileHandle2 =3D NULL; > - Size1 =3D 0; > + DataFromFile1 =3D NULL; > + DataFromFile2 =3D NULL; > + ReadStatus =3D OutOfDiffPoint; > + DifferentCount =3D 10; > + DifferentBytes =3D 4; > + DiffPointNumber =3D 0; > + InsertPosition1 =3D 0; > + InsertPosition2 =3D 0; > + TempAddress =3D 0; >=20 > // > // initialize the shell lib (we must be in non-auto-init...) > @@ -74,7 +148,7 @@ ShellCommandRunComp ( > // > // parse the command line > // > - Status =3D ShellCommandLineParse (EmptyParamList, &Package, > &ProblemParam, TRUE); > + Status =3D ShellCommandLineParse (ParamList, &Package, &ProblemParam, > TRUE); > if (EFI_ERROR(Status)) { > if (Status =3D=3D EFI_VOLUME_CORRUPTED && ProblemParam !=3D NULL) { > ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), > gShellDebug1HiiHandle, L"comp", ProblemParam); > @@ -118,142 +192,165 @@ ShellCommandRunComp ( > } > } > if (ShellStatus =3D=3D SHELL_SUCCESS) { > - ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_HEADER), > gShellDebug1HiiHandle, FileName1, FileName2); > Status =3D gEfiShellProtocol->GetFileSize(FileHandle1, &Size1); > ASSERT_EFI_ERROR(Status); > Status =3D gEfiShellProtocol->GetFileSize(FileHandle2, &Size2); > ASSERT_EFI_ERROR(Status); > - if (Size1 !=3D Size2) { > - ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_SIZE_FAIL= ), > gShellDebug1HiiHandle); > - DifferentCount++; > - ShellStatus =3D SHELL_NOT_EQUAL; > + > + if (ShellCommandLineGetFlag (Package, L"-n")) { > + TempParam =3D ShellCommandLineGetValue (Package, L"-n"); > + if (TempParam =3D=3D NULL) { > + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALU= E), > gShellDebug1HiiHandle, L"comp", L"-n"); > + ShellStatus =3D SHELL_INVALID_PARAMETER; > + } else { > + if (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16 > *)TempParam, L"all") =3D=3D 0) { > + DifferentCount =3D MAX_UINTN; > + } else { > + Status =3D ShellConvertStringToUint64 (TempParam, &Differe= ntCount, > FALSE, TRUE); > + if (EFI_ERROR(Status) || DifferentCount =3D=3D 0) { > + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN > (STR_GEN_PROBLEM_VAL), gShellDebug1HiiHandle, L"comp", TempParam, > L"-n"); > + ShellStatus =3D SHELL_INVALID_PARAMETER; > + } > + } > + } > + } > + > + if (ShellCommandLineGetFlag (Package, L"-s")) { > + TempParam =3D ShellCommandLineGetValue (Package, L"-s"); > + if (TempParam =3D=3D NULL) { > + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALU= E), > gShellDebug1HiiHandle, L"comp", L"-s"); > + ShellStatus =3D SHELL_INVALID_PARAMETER; > + } else { > + Status =3D ShellConvertStringToUint64 (TempParam, &Different= Bytes, > FALSE, TRUE); > + if (EFI_ERROR(Status) || DifferentBytes =3D=3D 0) { > + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN > (STR_GEN_PROBLEM_VAL), gShellDebug1HiiHandle, L"comp", TempParam, > L"-s"); > + ShellStatus =3D SHELL_INVALID_PARAMETER; > + } else { > + if (DifferentBytes > MAX (Size1, Size2)) { > + DifferentBytes =3D MAX (Size1, Size2); > + } > + } > + } > } > } > + > if (ShellStatus =3D=3D SHELL_SUCCESS) { > - for (LoopVar =3D 0 ; LoopVar < Size1 && DifferentCount <=3D 10 ;= LoopVar++) > { > + DataFromFile1 =3D AllocateZeroPool ((UINTN)DifferentBytes); > + DataFromFile2 =3D AllocateZeroPool ((UINTN)DifferentBytes); > + if (DataFromFile1 =3D=3D NULL || DataFromFile2 =3D=3D NULL) { > + ShellStatus =3D SHELL_OUT_OF_RESOURCES; > + SHELL_FREE_NON_NULL (DataFromFile1); > + SHELL_FREE_NON_NULL (DataFromFile2); > + } > + } > + > + if (ShellStatus =3D=3D SHELL_SUCCESS) { > + while (DiffPointNumber < DifferentCount) { > DataSizeFromFile1 =3D 1; > DataSizeFromFile2 =3D 1; > - Status =3D gEfiShellProtocol->ReadFile(FileHandle1, &DataSizeF= romFile1, > &DataFromFile1); > - ASSERT_EFI_ERROR(Status); > - Status =3D gEfiShellProtocol->ReadFile(FileHandle2, &DataSizeF= romFile2, > &DataFromFile2); > - ASSERT_EFI_ERROR(Status); > - if (DataFromFile1 !=3D DataFromFile2) { > - DiffPointAddress =3D LoopVar; > - ADF_File11 =3D 0; > - ADF_File12 =3D 0; > - ADF_File13 =3D 0; > - ADF_File21 =3D 0; > - ADF_File22 =3D 0; > - ADF_File23 =3D 0; > + OneByteFromFile1 =3D 0; > + OneByteFromFile2 =3D 0; > + Status =3D gEfiShellProtocol->ReadFile (FileHandle1, &DataSize= FromFile1, > &OneByteFromFile1); > + ASSERT_EFI_ERROR (Status); > + Status =3D gEfiShellProtocol->ReadFile (FileHandle2, &DataSize= FromFile2, > &OneByteFromFile2); > + ASSERT_EFI_ERROR (Status); >=20 > - // > - // Now check the next 3 bytes if possible. This will make o= utput > - // cleaner when there are a sequence of differences. > - // > - if (LoopVar + 1 < Size1) { > - LoopVar++; > - DataSizeFromFile1 =3D 1; > - DataSizeFromFile2 =3D 1; > - Status =3D gEfiShellProtocol->ReadFile(FileHandle1, > &DataSizeFromFile1, &ADF_File11); > - ASSERT_EFI_ERROR(Status); > - Status =3D gEfiShellProtocol->ReadFile(FileHandle2, > &DataSizeFromFile2, &ADF_File21); > - ASSERT_EFI_ERROR(Status); > - if (LoopVar + 1 < Size1) { > - LoopVar++; > - DataSizeFromFile1 =3D 1; > - DataSizeFromFile2 =3D 1; > - Status =3D gEfiShellProtocol->ReadFile(FileHandle1, > &DataSizeFromFile1, &ADF_File12); > - ASSERT_EFI_ERROR(Status); > - Status =3D gEfiShellProtocol->ReadFile(FileHandle2, > &DataSizeFromFile2, &ADF_File22); > - ASSERT_EFI_ERROR(Status); > - if (LoopVar + 1 < Size1) { > - LoopVar++; > - DataSizeFromFile1 =3D 1; > - DataSizeFromFile2 =3D 1; > - Status =3D gEfiShellProtocol->ReadFile(FileHandle1, > &DataSizeFromFile1, &ADF_File13); > - ASSERT_EFI_ERROR(Status); > - Status =3D gEfiShellProtocol->ReadFile(FileHandle2, > &DataSizeFromFile2, &ADF_File23); > - ASSERT_EFI_ERROR(Status); > - } > + TempAddress++; > + > + // > + // 1.When end of file and no chars in DataFromFile buffer, the= n break > while. > + // 2.If no more char in File1 or File2, The ReadStatus is InPr= evDiffPoint > forever. > + // So the previous different point is the last one, then bre= ak the while > block. > + // > + if ( (DataSizeFromFile1 =3D=3D 0 && InsertPosition1 =3D=3D 0 &= & > DataSizeFromFile2 =3D=3D 0 && InsertPosition2 =3D=3D 0) || > + (ReadStatus =3D=3D InPrevDiffPoint && (DataSizeFromFile1 = =3D=3D 0 || > DataSizeFromFile2 =3D=3D 0)) > + ) { > + break; > + } > + > + if (ReadStatus =3D=3D OutOfDiffPoint) { > + if (OneByteFromFile1 !=3D OneByteFromFile2) { > + ReadStatus =3D InDiffPoint; > + DiffPointAddress =3D TempAddress; > + if (DataSizeFromFile1 =3D=3D 1) { > + DataFromFile1[InsertPosition1++] =3D OneByteFromFile1; > + } > + if (DataSizeFromFile2 =3D=3D 1) { > + DataFromFile2[InsertPosition2++] =3D OneByteFromFile2; > } > } > + } else if (ReadStatus =3D=3D InDiffPoint) { > + if (DataSizeFromFile1 =3D=3D 1) { > + DataFromFile1[InsertPosition1++] =3D OneByteFromFile1; > + } > + if (DataSizeFromFile2 =3D=3D 1) { > + DataFromFile2[InsertPosition2++] =3D OneByteFromFile2; > + } > + } else if (ReadStatus =3D=3D InPrevDiffPoint) { > + if (OneByteFromFile1 =3D=3D OneByteFromFile2) { > + ReadStatus =3D OutOfDiffPoint; > + } > + } > + > + // > + // ReadStatus should be always equal InDiffPoint. > + // > + if ( InsertPosition1 =3D=3D DifferentBytes || > + InsertPosition2 =3D=3D DifferentBytes || > + (DataSizeFromFile1 =3D=3D 0 && DataSizeFromFile2 =3D=3D 0= ) > + ) { > + > + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN > (STR_COMP_DIFFERENCE_POINT), gShellDebug1HiiHandle, > ++DiffPointNumber); > + PrintDifferentPoint (FileName1, DataFromFile1, InsertPositio= n1, > DiffPointAddress, DifferentBytes); > + PrintDifferentPoint (FileName2, DataFromFile2, InsertPositio= n2, > DiffPointAddress, DifferentBytes); >=20 > // > - // Print out based on highest of the 4 bytes that are differ= ent. > + // One of two buffuers is empty, it means this is the last d= ifferent > point. > // > - if (ADF_File13 !=3D 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 !=3D 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 !=3D 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 =3D=3D 0 || InsertPosition2 =3D=3D 0) { > + break; > + } > + > + for (Index =3D 1; Index < InsertPosition1 && Index < InsertP= osition2; > Index++) { > + if (DataFromFile1[Index] =3D=3D DataFromFile2[Index]) { > + ReadStatus =3D OutOfDiffPoint; > + break; > + } > + } > + > + if (ReadStatus =3D=3D OutOfDiffPoint) { > + // > + // Try to find a new different point in the rest of DataFr= omFile. > + // > + for (; Index < MAX (InsertPosition1,InsertPosition2); Inde= x++) { > + if (DataFromFile1[Index] !=3D DataFromFile2[Index]) { > + ReadStatus =3D InDiffPoint; > + DiffPointAddress +=3D 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 d= ifferent point. > + // > + ReadStatus =3D InPrevDiffPoint; > } > - ShellStatus =3D SHELL_NOT_EQUAL; > + > + CopyMem (DataFromFile1, DataFromFile1 + Index, InsertPositio= n1 - > Index); > + CopyMem (DataFromFile2, DataFromFile2 + Index, InsertPositio= n2 - > Index); > + > + SetMem (DataFromFile1 + InsertPosition1 - Index, > (UINTN)DifferentBytes - InsertPosition1 + Index, 0); > + SetMem (DataFromFile2 + InsertPosition2 - Index, > (UINTN)DifferentBytes - InsertPosition2 + Index, 0); > + > + InsertPosition1 -=3D Index; > + InsertPosition2 -=3D Index; > } > } > - if (DifferentCount =3D=3D 0) { > + > + SHELL_FREE_NON_NULL (DataFromFile1); > + SHELL_FREE_NON_NULL (DataFromFile2); > + > + if (DiffPointNumber =3D=3D 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" >=20 > #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 %02= x > *%c%c%c*\r\n" > - "File2: %s\r\n" > - " %08x: %02x %02x %02= x > *%c%c%c*\r\n" > -#string STR_COMP_SPOT_FAIL4 #language en-US "" > - "Difference #% 2d:\r\n= " > - "File1: %s\r\n" > - " %08x: %02x %02x %02= x %02x > *%c%c%c%c*\r\n" > - "File2: %s\r\n" > - " %08x: %02x %02x %02= x %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 " " >=20 > #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