]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellLevel2CommandsLib/Set.c
ShellPkg: Standardized HP Copyright Message String
[mirror_edk2.git] / ShellPkg / Library / UefiShellLevel2CommandsLib / Set.c
CommitLineData
a405b86d 1/** @file\r
2 Main file for attrib shell level 2 function.\r
3\r
c011b6c9 4 (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
a405b86d 5 Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
6 This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php\r
10\r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#include "UefiShellLevel2CommandsLib.h"\r
17\r
18/**\r
19 Print out each environment variable registered with the Shell 2.0 GUID.\r
20\r
21 If you spawn a pre 2.0 shell from the Shell 2.0 the environment variable may not carry through.\r
22\r
23 @retval STATUS_SUCCESS the printout was sucessful\r
24 @return any return code from GetNextVariableName except EFI_NOT_FOUND\r
25**/\r
26SHELL_STATUS\r
27EFIAPI\r
28PrintAllShellEnvVars(\r
29 VOID\r
30 )\r
31{\r
32 CONST CHAR16 *Value;\r
33 CONST CHAR16 *ConstEnvNameList;\r
34\r
35 ConstEnvNameList = gEfiShellProtocol->GetEnv(NULL);\r
36 if (ConstEnvNameList == NULL) {\r
37 return (SHELL_SUCCESS);\r
38 }\r
39 while (*ConstEnvNameList != CHAR_NULL){\r
40 Value = gEfiShellProtocol->GetEnv(ConstEnvNameList);\r
41 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SET_DISP), gShellLevel2HiiHandle, ConstEnvNameList, Value);\r
42 ConstEnvNameList += StrLen(ConstEnvNameList)+1;\r
43 }\r
44\r
45 return (SHELL_SUCCESS);\r
46}\r
47\r
48STATIC CONST SHELL_PARAM_ITEM SetParamList[] = {\r
49 {L"-d", TypeValue},\r
50 {L"-v", TypeFlag},\r
51 {NULL, TypeMax}\r
52 };\r
53\r
54/**\r
55 Function for 'set' command.\r
56\r
57 @param[in] ImageHandle Handle to the Image (NULL if Internal).\r
58 @param[in] SystemTable Pointer to the System Table (NULL if Internal).\r
59**/\r
60SHELL_STATUS\r
61EFIAPI\r
62ShellCommandRunSet (\r
63 IN EFI_HANDLE ImageHandle,\r
64 IN EFI_SYSTEM_TABLE *SystemTable\r
65 )\r
66{\r
67 EFI_STATUS Status;\r
68 LIST_ENTRY *Package;\r
69 CONST CHAR16 *KeyName;\r
70 CONST CHAR16 *Value;\r
71 CHAR16 *ProblemParam;\r
72 SHELL_STATUS ShellStatus;\r
73\r
74 ProblemParam = NULL;\r
75 ShellStatus = SHELL_SUCCESS;\r
76\r
77 //\r
78 // initialize the shell lib (we must be in non-auto-init...)\r
79 //\r
80 Status = ShellInitialize();\r
81 ASSERT_EFI_ERROR(Status);\r
82\r
83 //\r
84 // Make sure globals are good...\r
85 //\r
86 Status = CommandInit();\r
87 ASSERT_EFI_ERROR(Status);\r
88\r
89 //\r
90 // parse the command line\r
91 //\r
92 Status = ShellCommandLineParse (SetParamList, &Package, &ProblemParam, TRUE);\r
93 if (EFI_ERROR(Status)) {\r
94 if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
099e8ff5 95 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel2HiiHandle, L"set", ProblemParam); \r
a405b86d 96 FreePool(ProblemParam);\r
97 return (SHELL_INVALID_PARAMETER);\r
98 } else {\r
99 ASSERT(FALSE);\r
100 }\r
101 } else {\r
102 //\r
103 // check for "-?"\r
104 //\r
105 if (ShellCommandLineGetFlag(Package, L"-?")) {\r
106 ASSERT(FALSE);\r
107 } else if (ShellCommandLineGetRawValue(Package, 3) != NULL) {\r
099e8ff5 108 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle, L"set"); \r
a405b86d 109 ShellStatus = SHELL_INVALID_PARAMETER;\r
110 } else if (ShellCommandLineGetRawValue(Package, 1) != NULL && ShellCommandLineGetFlag(Package, L"-d")) {\r
099e8ff5 111 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle, L"set"); \r
a405b86d 112 ShellStatus = SHELL_INVALID_PARAMETER;\r
113 } else if (ShellCommandLineGetFlag(Package, L"-d")) {\r
114 //\r
115 // delete a environment variable\r
116 //\r
117 KeyName = ShellCommandLineGetValue(Package, L"-d");\r
118 if (KeyName == NULL) {\r
099e8ff5 119 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellLevel2HiiHandle, L"set", L"-d"); \r
a405b86d 120 ShellStatus = SHELL_INVALID_PARAMETER;\r
121 } else {\r
122 Status = ShellSetEnvironmentVariable(KeyName, L"", ShellCommandLineGetFlag(Package, L"-v"));\r
123 if (EFI_ERROR(Status)) {\r
099e8ff5 124 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SET_ND), gShellLevel2HiiHandle, L"set", KeyName); \r
a405b86d 125 ShellStatus = SHELL_DEVICE_ERROR;\r
126 }\r
127 }\r
128 } else if (ShellCommandLineGetRawValue(Package, 1) == NULL) {\r
129 //\r
130 // print out all current environment variables\r
131 //\r
132 return(PrintAllShellEnvVars());\r
133 } else {\r
134 //\r
135 // we are either printing one or assigning one\r
136 //\r
137 KeyName = ShellCommandLineGetRawValue(Package, 1);\r
138 Value = ShellCommandLineGetRawValue(Package, 2);\r
139 if (KeyName != NULL && Value != NULL) {\r
140 //\r
141 // assigning one\r
142 //\r
143 Status = ShellSetEnvironmentVariable(KeyName, Value, ShellCommandLineGetFlag(Package, L"-v"));\r
144 } else {\r
145 if (KeyName != NULL) {\r
146 //\r
147 // print out value for this one only.\r
148 //\r
149 Value = ShellGetEnvironmentVariable(KeyName);\r
150 if (Value == NULL) {\r
099e8ff5 151 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SET_NF), gShellLevel2HiiHandle, L"set", KeyName); \r
a405b86d 152 ShellStatus = SHELL_SUCCESS;\r
153 } else {\r
154 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SET_DISP), gShellLevel2HiiHandle, KeyName, Value);\r
155 ShellStatus = SHELL_SUCCESS;\r
156 }\r
157 } else {\r
158 ASSERT(FALSE);\r
159 }\r
160 }\r
161 }\r
162 }\r
163\r
164 //\r
165 // free the command line package\r
166 //\r
167 ShellCommandLineFreeVarList (Package);\r
168\r
169 return (ShellStatus);\r
170}\r