]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellLevel3CommandsLib/Ver.c
ShellPkg/Dp: Add null pointer check
[mirror_edk2.git] / ShellPkg / Library / UefiShellLevel3CommandsLib / Ver.c
CommitLineData
a405b86d 1/** @file\r
2 Main file for Ver shell level 3 function.\r
3\r
9d54bf4e 4 (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
c011b6c9 5 (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>\r
a405b86d 6 Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
7 This program and the accompanying materials\r
8 are licensed and made available under the terms and conditions of the BSD License\r
9 which accompanies this distribution. The full text of the license may be found at\r
10 http://opensource.org/licenses/bsd-license.php\r
11\r
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
14\r
15**/\r
16\r
17#include "UefiShellLevel3CommandsLib.h"\r
18\r
19#include <Library/ShellLib.h>\r
20\r
21STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
22 {L"-s", TypeFlag},\r
23 {L"-terse", TypeFlag},\r
24 {L"-t", TypeFlag},\r
25 {L"-_pa", TypeFlag},\r
26 {NULL, TypeMax}\r
27 };\r
28\r
29/**\r
30 Function for 'ver' command.\r
31\r
32 @param[in] ImageHandle Handle to the Image (NULL if Internal).\r
33 @param[in] SystemTable Pointer to the System Table (NULL if Internal).\r
34**/\r
35SHELL_STATUS\r
36EFIAPI\r
37ShellCommandRunVer (\r
38 IN EFI_HANDLE ImageHandle,\r
39 IN EFI_SYSTEM_TABLE *SystemTable\r
40 )\r
41{\r
42 EFI_STATUS Status;\r
43 LIST_ENTRY *Package;\r
44 CHAR16 *ProblemParam;\r
45 SHELL_STATUS ShellStatus;\r
46 UINT8 Level;\r
47\r
48 Level = PcdGet8(PcdShellSupportLevel);\r
49 ProblemParam = NULL;\r
50 ShellStatus = SHELL_SUCCESS;\r
51\r
52 //\r
53 // initialize the shell lib (we must be in non-auto-init...)\r
54 //\r
55 Status = ShellInitialize();\r
56 ASSERT_EFI_ERROR(Status);\r
57\r
58 Status = CommandInit();\r
59 ASSERT_EFI_ERROR(Status);\r
60\r
61 //\r
62 // parse the command line\r
63 //\r
64 Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);\r
65 if (EFI_ERROR(Status)) {\r
66 if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
e54a10bb 67 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel3HiiHandle, L"ver", ProblemParam); \r
a405b86d 68 FreePool(ProblemParam);\r
69 ShellStatus = SHELL_INVALID_PARAMETER;\r
70 } else {\r
71 ASSERT(FALSE);\r
72 }\r
73 } else {\r
74 //\r
75 // check for "-?"\r
76 //\r
77 if (ShellCommandLineGetFlag(Package, L"-?")) {\r
78 ASSERT(FALSE);\r
79 }\r
80 if (ShellCommandLineGetRawValue(Package, 1) != NULL) {\r
81 //\r
82 // we have too many parameters\r
83 //\r
e54a10bb 84 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel3HiiHandle, L"ver"); \r
a405b86d 85 ShellStatus = SHELL_INVALID_PARAMETER;\r
86 } else {\r
87 if (ShellCommandLineGetFlag(Package, L"-s")) {\r
9d54bf4e
TS
88 if (ShellCommandLineGetFlag(Package, L"-terse") || ShellCommandLineGetFlag(Package, L"-t")){\r
89 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellLevel3HiiHandle, L"ver", L"-t or -terse", L"-s");\r
90 ShellStatus = SHELL_INVALID_PARAMETER;\r
91 } else {\r
92 ShellPrintHiiEx (\r
93 0,\r
94 gST->ConOut->Mode->CursorRow,\r
95 NULL,\r
96 STRING_TOKEN (STR_VER_OUTPUT_SIMPLE),\r
97 gShellLevel3HiiHandle,\r
98 gEfiShellProtocol->MajorVersion,\r
99 gEfiShellProtocol->MinorVersion\r
100 );\r
101 }\r
a405b86d 102 } else {\r
103 ShellPrintHiiEx (\r
104 0,\r
105 gST->ConOut->Mode->CursorRow,\r
106 NULL,\r
107 STRING_TOKEN (STR_VER_OUTPUT_SHELL),\r
108 gShellLevel3HiiHandle,\r
109 SupportLevel[Level],\r
110 gEfiShellProtocol->MajorVersion,\r
111 gEfiShellProtocol->MinorVersion\r
112 );\r
113 if (!ShellCommandLineGetFlag(Package, L"-terse") && !ShellCommandLineGetFlag(Package, L"-t")){\r
114 ShellPrintHiiEx(\r
115 -1,\r
116 -1,\r
117 NULL,\r
284e034f
CP
118 STRING_TOKEN (STR_VER_OUTPUT_SUPPLIER),\r
119 gShellLevel3HiiHandle,\r
120 (CHAR16 *) PcdGetPtr (PcdShellSupplier)\r
a405b86d 121 );\r
122\r
123\r
124 ShellPrintHiiEx (\r
125 -1,\r
126 -1,\r
127 NULL,\r
128 STRING_TOKEN (STR_VER_OUTPUT_UEFI),\r
129 gShellLevel3HiiHandle,\r
130 (gST->Hdr.Revision&0xffff0000)>>16,\r
131 (gST->Hdr.Revision&0x0000ffff),\r
132 gST->FirmwareVendor,\r
133 gST->FirmwareRevision\r
134 );\r
135 }\r
136 }\r
137 //\r
138 // implementation specific support for displaying processor architecture\r
139 //\r
140 if (ShellCommandLineGetFlag(Package, L"-_pa")) {\r
141 ShellPrintEx(-1, -1, L"%d\r\n", sizeof(UINTN)==sizeof(UINT64)?64:32);\r
142 }\r
143 }\r
144\r
145 //\r
146 // free the command line package\r
147 //\r
148 ShellCommandLineFreeVarList (Package);\r
149 }\r
150\r
151 return (ShellStatus);\r
152}\r
153\r