4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Main file for Comp shell Debug1 function.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "UefiShellDebug1CommandsLib.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Function for 'comp' command.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ImageHandle Handle to the Image (NULL if Internal).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] SystemTable Pointer to the System Table (NULL if Internal).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSHELL_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncShellCommandRunComp (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ImageHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_SYSTEM_TABLE *SystemTable
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY *Package;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ProblemParam;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_STATUS ShellStatus;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN LoopVar;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FILE_HANDLE FileHandle1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FILE_HANDLE FileHandle2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ErrorCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Size1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Size2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataFromFile1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataFromFile2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ADF_File11;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ADF_File12;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ADF_File13;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ADF_File21;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ADF_File22;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ADF_File23;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN DataSizeFromFile1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN DataSizeFromFile2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *FileName1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *FileName2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CONST CHAR16 *TempParam;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ErrorCount = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = EFI_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName1 = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName2 = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileHandle1 = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileHandle2 = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Size1 = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // initialize the shell lib (we must be in non-auto-init...)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ShellInitialize();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT_EFI_ERROR(Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = CommandInit();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT_EFI_ERROR(Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // parse the command line
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ShellCommandLineParse (EmptyParamList, &Package, &ProblemParam, TRUE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, ProblemParam);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool(ProblemParam);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT(FALSE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ShellCommandLineGetCount(Package) > 3) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (ShellCommandLineGetCount(Package) < 3) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TempParam = ShellCommandLineGetRawValue(Package, 1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT(TempParam != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName1 = ShellFindFilePath(TempParam);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (FileName1 == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, TempParam);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_NOT_FOUND;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ShellOpenFileByName(FileName1, &FileHandle1, EFI_FILE_MODE_READ, 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, TempParam, Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_NOT_FOUND;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TempParam = ShellCommandLineGetRawValue(Package, 2);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT(TempParam != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName2 = ShellFindFilePath(TempParam);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (FileName2 == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, TempParam);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_NOT_FOUND;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ShellOpenFileByName(FileName2, &FileHandle2, EFI_FILE_MODE_READ, 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, TempParam, Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_NOT_FOUND;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ShellStatus == SHELL_SUCCESS) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_HEADER), gShellDebug1HiiHandle, FileName1, FileName2);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gEfiShellProtocol->GetFileSize(FileHandle1, &Size1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT_EFI_ERROR(Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gEfiShellProtocol->GetFileSize(FileHandle2, &Size2);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT_EFI_ERROR(Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Size1 != Size2) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_SIZE_FAIL), gShellDebug1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ErrorCount++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_NOT_EQUAL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ShellStatus == SHELL_SUCCESS) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (LoopVar = 0 ; LoopVar < Size1 && ErrorCount <= 10 ; LoopVar++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataSizeFromFile1 = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataSizeFromFile2 = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gEfiShellProtocol->ReadFile(FileHandle1, &DataSizeFromFile1, &DataFromFile1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT_EFI_ERROR(Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gEfiShellProtocol->ReadFile(FileHandle2, &DataSizeFromFile2, &DataFromFile2);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT_EFI_ERROR(Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (DataFromFile1 != DataFromFile2) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ADF_File11 = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ADF_File12 = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ADF_File13 = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ADF_File21 = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ADF_File22 = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ADF_File23 = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (LoopVar + 1 < Size1) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LoopVar++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataSizeFromFile1 = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataSizeFromFile2 = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gEfiShellProtocol->ReadFile(FileHandle1, &DataSizeFromFile1, &ADF_File11);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT_EFI_ERROR(Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gEfiShellProtocol->ReadFile(FileHandle2, &DataSizeFromFile2, &ADF_File21);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT_EFI_ERROR(Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (LoopVar + 1 < Size1) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LoopVar++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataSizeFromFile1 = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataSizeFromFile2 = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gEfiShellProtocol->ReadFile(FileHandle1, &DataSizeFromFile1, &ADF_File12);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT_EFI_ERROR(Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gEfiShellProtocol->ReadFile(FileHandle2, &DataSizeFromFile2, &ADF_File22);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT_EFI_ERROR(Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (LoopVar + 1 < Size1) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LoopVar++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataSizeFromFile1 = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataSizeFromFile2 = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gEfiShellProtocol->ReadFile(FileHandle1, &DataSizeFromFile1, &ADF_File13);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT_EFI_ERROR(Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gEfiShellProtocol->ReadFile(FileHandle2, &DataSizeFromFile2, &ADF_File23);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT_EFI_ERROR(Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ADF_File13 != ADF_File23) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_COMP_SPOT_FAIL4),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDebug1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ++ErrorCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LoopVar,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile1, ADF_File11, ADF_File12, ADF_File13,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile1, ADF_File11, ADF_File12, ADF_File13,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LoopVar,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile2, ADF_File21, ADF_File22, ADF_File23,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile2, ADF_File21, ADF_File22, ADF_File23
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (ADF_File12 != ADF_File22) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_COMP_SPOT_FAIL3),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDebug1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ++ErrorCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LoopVar,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile1, ADF_File11, ADF_File12,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile1, ADF_File11, ADF_File12,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LoopVar,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile2, ADF_File21, ADF_File22,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile2, ADF_File21, ADF_File22
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (ADF_File11 != ADF_File21) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_COMP_SPOT_FAIL2),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDebug1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ++ErrorCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LoopVar,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile1, ADF_File11,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile1, ADF_File11,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LoopVar,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile2, ADF_File21,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile2, ADF_File21
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_COMP_SPOT_FAIL1),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDebug1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ++ErrorCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LoopVar,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LoopVar,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataFromFile2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_NOT_EQUAL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ErrorCount == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_FOOTER_PASS), gShellDebug1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_FOOTER_FAIL), gShellDebug1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCommandLineFreeVarList (Package);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(FileName1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(FileName2);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (FileHandle1 != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gEfiShellProtocol->CloseFile(FileHandle1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (FileHandle2 != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gEfiShellProtocol->CloseFile(FileHandle2);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (ShellStatus);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}