]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellLevel2CommandsLib/Set.c
ShellPkg: Clean up source files
[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
ba0014b9 5 Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
a405b86d 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
a405b86d 27PrintAllShellEnvVars(\r
28 VOID\r
29 )\r
30{\r
31 CONST CHAR16 *Value;\r
32 CONST CHAR16 *ConstEnvNameList;\r
33\r
34 ConstEnvNameList = gEfiShellProtocol->GetEnv(NULL);\r
35 if (ConstEnvNameList == NULL) {\r
36 return (SHELL_SUCCESS);\r
37 }\r
38 while (*ConstEnvNameList != CHAR_NULL){\r
39 Value = gEfiShellProtocol->GetEnv(ConstEnvNameList);\r
40 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SET_DISP), gShellLevel2HiiHandle, ConstEnvNameList, Value);\r
41 ConstEnvNameList += StrLen(ConstEnvNameList)+1;\r
42 }\r
43\r
44 return (SHELL_SUCCESS);\r
45}\r
46\r
47STATIC CONST SHELL_PARAM_ITEM SetParamList[] = {\r
48 {L"-d", TypeValue},\r
49 {L"-v", TypeFlag},\r
50 {NULL, TypeMax}\r
51 };\r
52\r
53/**\r
54 Function for 'set' command.\r
55\r
56 @param[in] ImageHandle Handle to the Image (NULL if Internal).\r
57 @param[in] SystemTable Pointer to the System Table (NULL if Internal).\r
58**/\r
59SHELL_STATUS\r
60EFIAPI\r
61ShellCommandRunSet (\r
62 IN EFI_HANDLE ImageHandle,\r
63 IN EFI_SYSTEM_TABLE *SystemTable\r
64 )\r
65{\r
66 EFI_STATUS Status;\r
67 LIST_ENTRY *Package;\r
68 CONST CHAR16 *KeyName;\r
69 CONST CHAR16 *Value;\r
70 CHAR16 *ProblemParam;\r
71 SHELL_STATUS ShellStatus;\r
72\r
73 ProblemParam = NULL;\r
74 ShellStatus = SHELL_SUCCESS;\r
75\r
76 //\r
77 // initialize the shell lib (we must be in non-auto-init...)\r
78 //\r
79 Status = ShellInitialize();\r
80 ASSERT_EFI_ERROR(Status);\r
81\r
82 //\r
83 // Make sure globals are good...\r
84 //\r
85 Status = CommandInit();\r
86 ASSERT_EFI_ERROR(Status);\r
87\r
88 //\r
89 // parse the command line\r
90 //\r
91 Status = ShellCommandLineParse (SetParamList, &Package, &ProblemParam, TRUE);\r
92 if (EFI_ERROR(Status)) {\r
93 if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
ba0014b9 94 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel2HiiHandle, L"set", ProblemParam);\r
a405b86d 95 FreePool(ProblemParam);\r
96 return (SHELL_INVALID_PARAMETER);\r
97 } else {\r
98 ASSERT(FALSE);\r
99 }\r
100 } else {\r
101 //\r
102 // check for "-?"\r
103 //\r
104 if (ShellCommandLineGetFlag(Package, L"-?")) {\r
105 ASSERT(FALSE);\r
106 } else if (ShellCommandLineGetRawValue(Package, 3) != NULL) {\r
ba0014b9 107 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle, L"set");\r
a405b86d 108 ShellStatus = SHELL_INVALID_PARAMETER;\r
109 } else if (ShellCommandLineGetRawValue(Package, 1) != NULL && ShellCommandLineGetFlag(Package, L"-d")) {\r
ba0014b9 110 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle, L"set");\r
a405b86d 111 ShellStatus = SHELL_INVALID_PARAMETER;\r
112 } else if (ShellCommandLineGetFlag(Package, L"-d")) {\r
113 //\r
114 // delete a environment variable\r
115 //\r
116 KeyName = ShellCommandLineGetValue(Package, L"-d");\r
117 if (KeyName == NULL) {\r
ba0014b9 118 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellLevel2HiiHandle, L"set", L"-d");\r
a405b86d 119 ShellStatus = SHELL_INVALID_PARAMETER;\r
120 } else {\r
121 Status = ShellSetEnvironmentVariable(KeyName, L"", ShellCommandLineGetFlag(Package, L"-v"));\r
122 if (EFI_ERROR(Status)) {\r
ba0014b9 123 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SET_ND), gShellLevel2HiiHandle, L"set", KeyName);\r
a405b86d 124 ShellStatus = SHELL_DEVICE_ERROR;\r
125 }\r
126 }\r
127 } else if (ShellCommandLineGetRawValue(Package, 1) == NULL) {\r
128 //\r
129 // print out all current environment variables\r
130 //\r
131 return(PrintAllShellEnvVars());\r
132 } else {\r
133 //\r
134 // we are either printing one or assigning one\r
135 //\r
136 KeyName = ShellCommandLineGetRawValue(Package, 1);\r
137 Value = ShellCommandLineGetRawValue(Package, 2);\r
138 if (KeyName != NULL && Value != NULL) {\r
139 //\r
140 // assigning one\r
141 //\r
142 Status = ShellSetEnvironmentVariable(KeyName, Value, ShellCommandLineGetFlag(Package, L"-v"));\r
938d65a5
QS
143 if (EFI_ERROR(Status)) {\r
144 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SET_ERROR_SET), gShellLevel2HiiHandle, L"set", KeyName);\r
145 ShellStatus = (SHELL_STATUS) (Status & (~MAX_BIT));\r
146 }\r
ba0014b9 147\r
a405b86d 148 } else {\r
149 if (KeyName != NULL) {\r
150 //\r
151 // print out value for this one only.\r
152 //\r
153 Value = ShellGetEnvironmentVariable(KeyName);\r
154 if (Value == NULL) {\r
ba0014b9 155 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SET_NF), gShellLevel2HiiHandle, L"set", KeyName);\r
a405b86d 156 ShellStatus = SHELL_SUCCESS;\r
157 } else {\r
158 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SET_DISP), gShellLevel2HiiHandle, KeyName, Value);\r
159 ShellStatus = SHELL_SUCCESS;\r
160 }\r
161 } else {\r
162 ASSERT(FALSE);\r
163 }\r
164 }\r
165 }\r
166 }\r
167\r
168 //\r
169 // free the command line package\r
170 //\r
171 ShellCommandLineFreeVarList (Package);\r
172\r
173 return (ShellStatus);\r
174}\r