]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellDebug1CommandsLib/Comp.c
Update prints of variable attributes from 'RS' to 'RT' for 'Dmpstore' command.
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / Comp.c
CommitLineData
5d73d92f 1/** @file\r
2 Main file for Comp shell Debug1 function.\r
3\r
3737ac2b 4 Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>\r
5d73d92f 5 This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution. The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#include "UefiShellDebug1CommandsLib.h"\r
16\r
3737ac2b 17/**\r
18 Function for 'comp' command.\r
19\r
20 @param[in] ImageHandle Handle to the Image (NULL if Internal).\r
21 @param[in] SystemTable Pointer to the System Table (NULL if Internal).\r
22**/\r
5d73d92f 23SHELL_STATUS\r
24EFIAPI\r
25ShellCommandRunComp (\r
26 IN EFI_HANDLE ImageHandle,\r
27 IN EFI_SYSTEM_TABLE *SystemTable\r
28 )\r
29{\r
30 EFI_STATUS Status;\r
31 LIST_ENTRY *Package;\r
32 CHAR16 *ProblemParam;\r
33 SHELL_STATUS ShellStatus;\r
34 UINTN LoopVar;\r
35 SHELL_FILE_HANDLE FileHandle1;\r
36 SHELL_FILE_HANDLE FileHandle2;\r
37 UINT8 ErrorCount;\r
38 UINT64 Size1;\r
39 UINT64 Size2;\r
40 UINT8 DataFromFile1;\r
41 UINT8 DataFromFile2;\r
42 UINT8 ADF_File11;\r
43 UINT8 ADF_File12;\r
44 UINT8 ADF_File13;\r
45 UINT8 ADF_File21;\r
46 UINT8 ADF_File22;\r
47 UINT8 ADF_File23;\r
48 UINTN DataSizeFromFile1;\r
49 UINTN DataSizeFromFile2;\r
50 CHAR16 *FileName1;\r
51 CHAR16 *FileName2;\r
ecae5117 52 CONST CHAR16 *TempParam;\r
5d73d92f 53\r
54 ErrorCount = 0;\r
55 ShellStatus = SHELL_SUCCESS;\r
56 Status = EFI_SUCCESS;\r
57 FileName1 = NULL;\r
58 FileName2 = NULL;\r
59 FileHandle1 = NULL;\r
60 FileHandle2 = NULL;\r
61 Size1 = 0;\r
62\r
63 //\r
64 // initialize the shell lib (we must be in non-auto-init...)\r
65 //\r
66 Status = ShellInitialize();\r
67 ASSERT_EFI_ERROR(Status);\r
68\r
69 Status = CommandInit();\r
70 ASSERT_EFI_ERROR(Status);\r
71\r
72 //\r
73 // parse the command line\r
74 //\r
75 Status = ShellCommandLineParse (EmptyParamList, &Package, &ProblemParam, TRUE);\r
76 if (EFI_ERROR(Status)) {\r
77 if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
78 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, ProblemParam);\r
79 FreePool(ProblemParam);\r
80 ShellStatus = SHELL_INVALID_PARAMETER;\r
81 } else {\r
82 ASSERT(FALSE);\r
83 }\r
84 } else {\r
85 if (ShellCommandLineGetCount(Package) > 3) {\r
86 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
87 ShellStatus = SHELL_INVALID_PARAMETER;\r
88 } else if (ShellCommandLineGetCount(Package) < 3) {\r
89 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
90 ShellStatus = SHELL_INVALID_PARAMETER;\r
91 } else {\r
ecae5117 92 TempParam = ShellCommandLineGetRawValue(Package, 1);\r
93 ASSERT(TempParam != NULL);\r
94 FileName1 = ShellFindFilePath(TempParam);\r
3737ac2b 95 if (FileName1 == NULL) {\r
ecae5117 96 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, TempParam);\r
5d73d92f 97 ShellStatus = SHELL_NOT_FOUND;\r
3737ac2b 98 } else {\r
99 Status = ShellOpenFileByName(FileName1, &FileHandle1, EFI_FILE_MODE_READ, 0);\r
100 if (EFI_ERROR(Status)) {\r
ecae5117 101 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, TempParam, Status);\r
3737ac2b 102 ShellStatus = SHELL_NOT_FOUND;\r
103 }\r
5d73d92f 104 }\r
ecae5117 105 TempParam = ShellCommandLineGetRawValue(Package, 2);\r
106 ASSERT(TempParam != NULL);\r
107 FileName2 = ShellFindFilePath(TempParam);\r
3737ac2b 108 if (FileName2 == NULL) {\r
ecae5117 109 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, TempParam);\r
5d73d92f 110 ShellStatus = SHELL_NOT_FOUND;\r
3737ac2b 111 } else {\r
112 Status = ShellOpenFileByName(FileName2, &FileHandle2, EFI_FILE_MODE_READ, 0);\r
113 if (EFI_ERROR(Status)) {\r
ecae5117 114 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, TempParam, Status);\r
3737ac2b 115 ShellStatus = SHELL_NOT_FOUND;\r
116 }\r
5d73d92f 117 }\r
118 if (ShellStatus == SHELL_SUCCESS) {\r
119 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_HEADER), gShellDebug1HiiHandle, FileName1, FileName2);\r
120 Status = gEfiShellProtocol->GetFileSize(FileHandle1, &Size1);\r
121 ASSERT_EFI_ERROR(Status);\r
122 Status = gEfiShellProtocol->GetFileSize(FileHandle2, &Size2);\r
123 ASSERT_EFI_ERROR(Status);\r
124 if (Size1 != Size2) {\r
125 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_SIZE_FAIL), gShellDebug1HiiHandle);\r
126 ErrorCount++;\r
127 ShellStatus = SHELL_NOT_EQUAL;\r
128 }\r
129 }\r
130 if (ShellStatus == SHELL_SUCCESS) {\r
131 for (LoopVar = 0 ; LoopVar < Size1 && ErrorCount <= 10 ; LoopVar++) {\r
132 DataSizeFromFile1 = 1;\r
133 DataSizeFromFile2 = 1;\r
134 Status = gEfiShellProtocol->ReadFile(FileHandle1, &DataSizeFromFile1, &DataFromFile1);\r
135 ASSERT_EFI_ERROR(Status);\r
136 Status = gEfiShellProtocol->ReadFile(FileHandle2, &DataSizeFromFile2, &DataFromFile2);\r
137 ASSERT_EFI_ERROR(Status);\r
138 if (DataFromFile1 != DataFromFile2) {\r
139 ADF_File11 = 0;\r
140 ADF_File12 = 0;\r
141 ADF_File13 = 0;\r
142 ADF_File21 = 0;\r
143 ADF_File22 = 0;\r
144 ADF_File23 = 0;\r
145 if (LoopVar + 1 < Size1) {\r
146 LoopVar++;\r
147 DataSizeFromFile1 = 1;\r
148 DataSizeFromFile2 = 1;\r
149 Status = gEfiShellProtocol->ReadFile(FileHandle1, &DataSizeFromFile1, &ADF_File11);\r
150 ASSERT_EFI_ERROR(Status);\r
151 Status = gEfiShellProtocol->ReadFile(FileHandle2, &DataSizeFromFile2, &ADF_File21);\r
152 ASSERT_EFI_ERROR(Status);\r
153 if (LoopVar + 1 < Size1) {\r
154 LoopVar++;\r
155 DataSizeFromFile1 = 1;\r
156 DataSizeFromFile2 = 1;\r
157 Status = gEfiShellProtocol->ReadFile(FileHandle1, &DataSizeFromFile1, &ADF_File12);\r
158 ASSERT_EFI_ERROR(Status);\r
159 Status = gEfiShellProtocol->ReadFile(FileHandle2, &DataSizeFromFile2, &ADF_File22);\r
160 ASSERT_EFI_ERROR(Status);\r
161 if (LoopVar + 1 < Size1) {\r
162 LoopVar++;\r
163 DataSizeFromFile1 = 1;\r
164 DataSizeFromFile2 = 1;\r
165 Status = gEfiShellProtocol->ReadFile(FileHandle1, &DataSizeFromFile1, &ADF_File13);\r
166 ASSERT_EFI_ERROR(Status);\r
167 Status = gEfiShellProtocol->ReadFile(FileHandle2, &DataSizeFromFile2, &ADF_File23);\r
168 ASSERT_EFI_ERROR(Status);\r
169 }\r
170 }\r
171 }\r
172 if (ADF_File13 != ADF_File23) {\r
173 ShellPrintHiiEx(\r
174 -1,\r
175 -1,\r
176 NULL,\r
177 STRING_TOKEN (STR_COMP_SPOT_FAIL4),\r
178 gShellDebug1HiiHandle,\r
179 ++ErrorCount,\r
180 FileName1,\r
181 LoopVar,\r
182 DataFromFile1, ADF_File11, ADF_File12, ADF_File13,\r
183 DataFromFile1, ADF_File11, ADF_File12, ADF_File13,\r
184 FileName2,\r
185 LoopVar,\r
186 DataFromFile2, ADF_File21, ADF_File22, ADF_File23,\r
187 DataFromFile2, ADF_File21, ADF_File22, ADF_File23\r
188 );\r
189 } else if (ADF_File12 != ADF_File22) {\r
190 ShellPrintHiiEx(\r
191 -1,\r
192 -1,\r
193 NULL,\r
194 STRING_TOKEN (STR_COMP_SPOT_FAIL3),\r
195 gShellDebug1HiiHandle,\r
196 ++ErrorCount,\r
197 FileName1,\r
198 LoopVar,\r
199 DataFromFile1, ADF_File11, ADF_File12,\r
200 DataFromFile1, ADF_File11, ADF_File12,\r
201 FileName2,\r
202 LoopVar,\r
203 DataFromFile2, ADF_File21, ADF_File22,\r
204 DataFromFile2, ADF_File21, ADF_File22\r
205 );\r
206 } else if (ADF_File11 != ADF_File21) {\r
207 ShellPrintHiiEx(\r
208 -1,\r
209 -1,\r
210 NULL,\r
211 STRING_TOKEN (STR_COMP_SPOT_FAIL2),\r
212 gShellDebug1HiiHandle,\r
213 ++ErrorCount,\r
214 FileName1,\r
215 LoopVar,\r
216 DataFromFile1, ADF_File11,\r
217 DataFromFile1, ADF_File11,\r
218 FileName2,\r
219 LoopVar,\r
220 DataFromFile2, ADF_File21,\r
221 DataFromFile2, ADF_File21\r
222 );\r
223 } else {\r
224 ShellPrintHiiEx(\r
225 -1,\r
226 -1,\r
227 NULL,\r
228 STRING_TOKEN (STR_COMP_SPOT_FAIL1),\r
229 gShellDebug1HiiHandle,\r
230 ++ErrorCount,\r
231 FileName1,\r
232 LoopVar,\r
233 DataFromFile1,\r
234 DataFromFile1,\r
235 FileName2,\r
236 LoopVar,\r
237 DataFromFile2,\r
238 DataFromFile2\r
239 );\r
240 }\r
241 ShellStatus = SHELL_NOT_EQUAL;\r
242 }\r
243 }\r
3737ac2b 244 if (ErrorCount == 0) {\r
245 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_FOOTER_PASS), gShellDebug1HiiHandle);\r
246 } else {\r
247 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_FOOTER_FAIL), gShellDebug1HiiHandle);\r
248 }\r
5d73d92f 249 }\r
250 }\r
251\r
252 ShellCommandLineFreeVarList (Package);\r
253 }\r
3737ac2b 254 SHELL_FREE_NON_NULL(FileName1);\r
255 SHELL_FREE_NON_NULL(FileName2);\r
256\r
5d73d92f 257 if (FileHandle1 != NULL) {\r
258 gEfiShellProtocol->CloseFile(FileHandle1);\r
259 }\r
260 if (FileHandle2 != NULL) {\r
261 gEfiShellProtocol->CloseFile(FileHandle2);\r
262 }\r
263\r
264 return (ShellStatus);\r
265}\r