]> git.proxmox.com Git - mirror_edk2.git/blob - ShellPkg/Application/ShellLibTestApp/sa3.c
Put EOF (End of File) on its own line for all source files. This is required for...
[mirror_edk2.git] / ShellPkg / Application / ShellLibTestApp / sa3.c
1 /** @file
2 This is a simple shell application
3
4 This should be executed with "/Param2 Val1" and "/Param1" as the 2 command line options!
5
6 Copyright (c) 2008-2009, Intel Corporation
7 All rights reserved. This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15 **/
16
17 #include <Uefi.h>
18 #include <Library/UefiApplicationEntryPoint.h>
19 #include <Library/UefiLib.h>
20 #include <Library/ShellLib.h>
21 #include <Library/DebugLib.h>
22 #include <Library/MemoryAllocationLib.h>
23
24 SHELL_PARAM_ITEM ParamList[] = {
25 {L"/Param1", TypeFlag},
26 {L"/Param2", TypeValue},
27 {NULL, TypeMax}};
28
29 /**
30 as the real entry point for the application.
31
32 @param[in] ImageHandle The firmware allocated handle for the EFI image.
33 @param[in] SystemTable A pointer to the EFI System Table.
34
35 @retval EFI_SUCCESS The entry point is executed successfully.
36 @retval other Some error occurs when executing this entry point.
37
38 **/
39 EFI_STATUS
40 EFIAPI
41 UefiMain (
42 IN EFI_HANDLE ImageHandle,
43 IN EFI_SYSTEM_TABLE *SystemTable
44 )
45 {
46 EFI_FILE_HANDLE FileHandle;
47 EFI_STATUS Status;
48 CHAR16 FileName[100];
49 UINTN BufferSize;
50 UINT64 Position;
51 UINT8 Buffer[200];
52 EFI_FILE_INFO *pFileInfo;
53 UINT64 Size;
54 BOOLEAN NoFile;
55 EFI_SHELL_FILE_INFO *pShellFileInfo;
56 LIST_ENTRY *List;
57
58 FileHandle = NULL;
59 StrCpy(FileName, L"testfile.txt");
60 Position = 0;
61 pFileInfo = NULL;
62 Size = 0;
63 NoFile = FALSE;
64 pShellFileInfo = NULL;
65 List = NULL;
66
67 ASSERT(ShellGetExecutionBreakFlag() == FALSE);
68 ASSERT(StrCmp(ShellGetCurrentDir(NULL), L"f8:\\") == 0);
69 Print(L"execution break and get cur dir - pass\r\n");
70
71 ShellSetPageBreakMode(TRUE);
72
73 Status = ShellOpenFileByName(FileName,
74 &FileHandle,
75 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
76 0
77 );
78 ASSERT_EFI_ERROR(Status);
79
80 BufferSize = StrSize(FileName);
81 Status = ShellWriteFile(FileHandle, &BufferSize, FileName);
82 ASSERT_EFI_ERROR(Status);
83 Status = ShellGetFilePosition(FileHandle, &Position);
84 ASSERT_EFI_ERROR(Status);
85 ASSERT(Position == 0x1A);
86 Status = ShellSetFilePosition(FileHandle, 0);
87 ASSERT_EFI_ERROR(Status);
88 BufferSize = sizeof(Buffer) * sizeof(Buffer[0]);
89 Status = ShellReadFile(FileHandle, &BufferSize, Buffer);
90 ASSERT_EFI_ERROR(Status);
91 ASSERT(BufferSize == 0x1A);
92 ASSERT(StrCmp((CHAR16*)Buffer, FileName) == 0);
93 pFileInfo = ShellGetFileInfo(FileHandle);
94 ASSERT(pFileInfo != NULL);
95 ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);
96 ASSERT(pFileInfo->FileSize == 0x1A);
97 FreePool(pFileInfo);
98 pFileInfo = NULL;
99 Status = ShellCloseFile(&FileHandle);
100 ASSERT_EFI_ERROR(Status);
101 Print(L"read, write, create, getinfo - pass\r\n");
102
103 Status = ShellOpenFileByName(FileName,
104 &FileHandle,
105 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
106 0
107 );
108 ASSERT_EFI_ERROR(Status);
109 pFileInfo = ShellGetFileInfo(FileHandle);
110 ASSERT(pFileInfo != NULL);
111 pFileInfo->FileSize = 0x20;
112 Status = ShellSetFileInfo(FileHandle, pFileInfo);
113 FreePool(pFileInfo);
114 pFileInfo = NULL;
115 ASSERT_EFI_ERROR(Status);
116 pFileInfo = ShellGetFileInfo(FileHandle);
117 ASSERT(pFileInfo != NULL);
118 ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);
119 ASSERT(pFileInfo->PhysicalSize == 0x20);
120 ASSERT(pFileInfo->FileSize == 0x20);
121 ASSERT((pFileInfo->Attribute&EFI_FILE_DIRECTORY)==0);
122 FreePool(pFileInfo);
123 Status = ShellGetFileSize(FileHandle, &Size);
124 ASSERT(Size == 0x20);
125 ASSERT_EFI_ERROR(Status);
126 Status = ShellCloseFile(&FileHandle);
127 ASSERT_EFI_ERROR(Status);
128 Print(L"setinfo and change size, getsize - pass\r\n");
129
130 Status = ShellOpenFileByName(FileName,
131 &FileHandle,
132 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
133 0
134 );
135 ASSERT_EFI_ERROR(Status);
136
137 pFileInfo = ShellGetFileInfo(FileHandle);
138 ASSERT(pFileInfo != NULL);
139 ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);
140 ASSERT(pFileInfo->PhysicalSize == 0x20);
141 ASSERT(pFileInfo->FileSize == 0x20);
142 ASSERT((pFileInfo->Attribute&EFI_FILE_DIRECTORY)==0);
143 FreePool(pFileInfo);
144 pFileInfo = NULL;
145 Status = ShellDeleteFile(&FileHandle);
146 ASSERT_EFI_ERROR(Status);
147 Print(L"reopen file - pass\r\n");
148
149 Status = ShellOpenFileByName(FileName,
150 &FileHandle,
151 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
152 0
153 );
154 ASSERT_EFI_ERROR(Status);
155 pFileInfo = ShellGetFileInfo(FileHandle);
156 ASSERT(pFileInfo != NULL);
157 ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);
158 ASSERT(pFileInfo->PhysicalSize == 0x0);
159 ASSERT(pFileInfo->FileSize == 0x0);
160 ASSERT((pFileInfo->Attribute&EFI_FILE_DIRECTORY)==0);
161 FreePool(pFileInfo);
162 Status = ShellDeleteFile(&FileHandle);
163 ASSERT_EFI_ERROR(Status);
164 Print(L"size of empty - pass\r\n");
165
166 Status = ShellOpenFileByName(FileName,
167 &FileHandle,
168 EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
169 0
170 );
171 ASSERT(Status == EFI_NOT_FOUND);
172 ASSERT(FileHandle == NULL);
173
174 Status = ShellCreateDirectory(FileName, &FileHandle);
175 ASSERT_EFI_ERROR(Status);
176 ASSERT(FileHandle != NULL);
177 pFileInfo = ShellGetFileInfo(FileHandle);
178 ASSERT(pFileInfo != NULL);
179 ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);
180 ASSERT(pFileInfo->Attribute&EFI_FILE_DIRECTORY);
181 Status = ShellDeleteFile(&FileHandle);
182 ASSERT_EFI_ERROR(Status);
183 Print(L"Directory create - pass\r\n");
184
185 // FindFirst and FindNext
186 StrCpy(FileName, L"testDir");
187 Status = ShellCreateDirectory(FileName, &FileHandle);
188 Status = ShellCloseFile(&FileHandle);
189 StrCat(FileName, L"\\File.txt");
190 Status = ShellOpenFileByName(FileName,
191 &FileHandle,
192 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
193 0
194 );
195 ASSERT_EFI_ERROR(Status);
196 Status = ShellCloseFile(&FileHandle);
197 StrCpy(FileName, L"testDir");
198 Status = ShellOpenFileByName(FileName,
199 &FileHandle,
200 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
201 0
202 );
203 ASSERT_EFI_ERROR(Status);
204 Status = ShellFindFirstFile(FileHandle, &pFileInfo);
205 ASSERT_EFI_ERROR(Status);
206 Status = ShellFindNextFile(FileHandle, pFileInfo, &NoFile);
207 ASSERT_EFI_ERROR(Status);
208 ASSERT(NoFile == FALSE);
209 Status = ShellFindNextFile(FileHandle, pFileInfo, &NoFile);
210 ASSERT_EFI_ERROR(Status);
211 ASSERT(NoFile == FALSE);
212 Status = ShellFindNextFile(FileHandle, pFileInfo, &NoFile);
213 ASSERT_EFI_ERROR(Status);
214 ///@todo - why is NoFile never set? limitation of NT32 file system?
215 Status = ShellDeleteFile(&FileHandle);
216 ASSERT(Status == RETURN_WARN_DELETE_FAILURE);
217 Print(L"FindFirst - pass\r\n");
218 Print(L"FindNext - Verify with real EFI system. Cant verify NoFile under NT32\r\n");
219
220 // open and close meta arg
221 Status = ShellOpenFileMetaArg(L"testDir\\*.*", EFI_FILE_MODE_READ, &pShellFileInfo);
222 ASSERT_EFI_ERROR(Status);
223 ASSERT(pShellFileInfo->Status == 0);
224 ASSERT(StrCmp(pShellFileInfo->FileName, L"File.txt") == 0);
225 ASSERT(pShellFileInfo->Handle);
226 ASSERT(pShellFileInfo->Info);
227 ASSERT(pShellFileInfo->Info->FileSize == 0);
228 ASSERT(StrCmp(pShellFileInfo->Info->FileName, L"File.txt") == 0);
229 ASSERT(pShellFileInfo->Info->Attribute == 0);
230
231 Status = ShellCloseFileMetaArg(&pShellFileInfo);
232 ASSERT_EFI_ERROR(Status);
233 Print(L"Open/Close Meta Arg - pass\r\n");
234
235 // now delete that file and that directory
236 StrCat(FileName, L"\\File.txt");
237 Status = ShellOpenFileByName(FileName,
238 &FileHandle,
239 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
240 0
241 );
242 ASSERT_EFI_ERROR(Status);
243 Status = ShellDeleteFile(&FileHandle);
244 StrCpy(FileName, L"testDir");
245 ASSERT_EFI_ERROR(Status);
246 Status = ShellOpenFileByName(FileName,
247 &FileHandle,
248 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
249 0
250 );
251 Status = ShellDeleteFile(&FileHandle);
252 ASSERT_EFI_ERROR(Status);
253
254 // get environment variable
255 // made for testing under nt32
256 ASSERT(StrCmp(ShellGetEnvironmentVariable(L"path"), L".;f8:\\efi\\tools;f8:\\efi\\boot;f8:\\;f9:\\efi\\tools;f9:\\efi\\boot;f9:\\") == 0);
257 Print(L"ShellGetEnvironmentVariable - pass\r\n");
258
259 // set environment variable
260 Status = ShellSetEnvironmentVariable(L"", L"", FALSE);
261 ASSERT(Status == EFI_UNSUPPORTED);
262 Print(L"ShellSetEnvironmentVariable - pass\r\n");
263
264 // ShellExecute
265 Status = ShellExecute(&ImageHandle, L"EmptyApplication.efi", TRUE, NULL, NULL);
266 ASSERT_EFI_ERROR(Status);
267 // the pass printout for this is performed by EmptyApplication
268 Print(L"\r\n");
269
270 // command line param functions
271 Status = ShellCommandLineParse(ParamList, &List, NULL, FALSE);
272 // if you put an invalid parameter you SHOULD hit this assert.
273 ASSERT_EFI_ERROR(Status);
274 if (List) {
275 ASSERT(ShellCommandLineGetFlag(List, L"/Param5") == FALSE);
276 ASSERT(ShellCommandLineGetFlag(List, L"/Param1") != FALSE);
277 ASSERT(StrCmp(ShellCommandLineGetValue(List, L"/Param2"), L"Val1")==0);
278 ASSERT(StrCmp(ShellCommandLineGetRawValue(List, 0), L"SimpleApplication.efi")==0);
279
280 ShellCommandLineFreeVarList(List);
281 } else {
282 Print(L"param checking skipped.\r\n");
283 }
284
285 // page break mode (done last so we can see the results)
286 // we set this true at the begining of the program
287 // this is enough lines to trigger the page...
288 Print(L"1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\n19\r\n20\r\n21\r\n22\r\n23\r\n24\r\n25\r\n26\r\n27\r\n28\r\n29\r\n30\r\n31\r\n");
289 ShellSetPageBreakMode(FALSE);
290 Print(L"1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\n19\r\n20\r\n21\r\n22\r\n23\r\n24\r\n25\r\n26\r\n27\r\n28\r\n29\r\n30\r\n31\r\n32\r\n33\r\n34\r\n35\r\n36\r\n37\r\n38\r\n39\r\n40\r\n41\r\n42\r\n43\r\n44\r\n45\r\n46\r\n47\r\n48\r\n49\r\n50\r\n51\r\n52\r\n53\r\n54\r\n55\r\n56\r\n57\r\n58\r\n59\r\n60\r\n");
291
292 return EFI_SUCCESS;
293 }
294
295
296 /*
297 done - ShellGetFileInfo
298 done - ShellSetFileInfo
299 done - ShellOpenFileByDevicePath
300 done - ShellOpenFileByName
301 done - ShellCreateDirectory
302 done - ShellReadFile
303 done - ShellWriteFile
304 done - ShellCloseFile
305 done - ShellDeleteFile
306 done - ShellSetFilePosition
307 done - ShellGetFilePosition
308 ???? - ShellFlushFile
309 done - ShellFindFirstFile
310 done - ShellFindNextFile
311 done - ShellGetFileSize
312 done - ShellGetExecutionBreakFlag
313 done - ShellGetEnvironmentVariable
314 done - ShellSetEnvironmentVariable
315 done - ShellExecute
316 done - ShellGetCurrentDir
317 done - ShellSetPageBreakMode
318 done - ShellOpenFileMetaArg
319 done - ShellCloseFileMetaArg
320 done - ShellCommandLineParse
321 done - ShellCommandLineFreeVarList
322 done - ShellCommandLineGetFlag
323 done - ShellCommandLineGetValue
324 done - ShellCommandLineGetRawValue
325 */