\r
#include <Library/ShellLib.h>\r
\r
+/**\r
+ Print out single alias registered with the Shell.\r
+\r
+ @param[in] Alias Points to the NULL-terminated shell alias.\r
+ If this parameter is NULL, then all\r
+ aliases will be returned in ReturnedData.\r
+ @retval SHELL_SUCCESS the printout was sucessful\r
+**/\r
+SHELL_STATUS\r
+PrintSingleShellAlias(\r
+ IN CONST CHAR16 *Alias\r
+ )\r
+{\r
+ CONST CHAR16 *ConstAliasVal;\r
+ SHELL_STATUS ShellStatus;\r
+ BOOLEAN Volatile;\r
+\r
+ ShellStatus = SHELL_SUCCESS;\r
+ ConstAliasVal = gEfiShellProtocol->GetAlias (Alias, &Volatile);\r
+ if (ConstAliasVal == NULL) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellLevel3HiiHandle, L"alias", Alias);\r
+ ShellStatus = SHELL_INVALID_PARAMETER;\r
+ } else {\r
+ if (ShellCommandIsOnAliasList (Alias)) {\r
+ Volatile = FALSE;\r
+ }\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_ALIAS_OUTPUT), gShellLevel3HiiHandle, !Volatile ? L' ' : L'*', Alias, ConstAliasVal);\r
+ }\r
+ return ShellStatus;\r
+}\r
+\r
/**\r
Print out each alias registered with the Shell.\r
\r
{\r
CONST CHAR16 *ConstAllAliasList;\r
CHAR16 *Alias;\r
- CONST CHAR16 *Command;\r
CHAR16 *Walker;\r
- BOOLEAN Volatile;\r
-\r
- Volatile = FALSE;\r
\r
ConstAllAliasList = gEfiShellProtocol->GetAlias(NULL, NULL);\r
if (ConstAllAliasList == NULL) {\r
Walker[0] = CHAR_NULL;\r
Walker = Walker + 1;\r
}\r
- Command = gEfiShellProtocol->GetAlias(Alias, &Volatile);\r
- if (ShellCommandIsOnAliasList(Alias)) {\r
- Volatile = FALSE;\r
- }\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_ALIAS_OUTPUT), gShellLevel3HiiHandle, !Volatile?L' ':L'*', Alias, Command);\r
+ PrintSingleShellAlias(Alias);\r
} while (Walker != NULL && Walker[0] != CHAR_NULL);\r
\r
FreePool(Alias);\r
return (SHELL_SUCCESS);\r
}\r
\r
+/**\r
+ Changes a shell command alias.\r
+\r
+ This function creates an alias for a shell command or if Alias is NULL it will delete an existing alias.\r
+\r
+\r
+ @param[in] Command Points to the NULL-terminated shell command or existing alias.\r
+ @param[in] Alias Points to the NULL-terminated alias for the shell command. If this is NULL, and\r
+ Command refers to an alias, that alias will be deleted.\r
+ @param[in] Replace If TRUE and the alias already exists, then the existing alias will be replaced. If\r
+ FALSE and the alias already exists, then the existing alias is unchanged and\r
+ EFI_ACCESS_DENIED is returned.\r
+ @param[in] Volatile if TRUE the Alias being set will be stored in a volatile fashion. if FALSE the\r
+ Alias being set will be stored in a non-volatile fashion.\r
+\r
+ @retval SHELL_SUCCESS Alias created or deleted successfully.\r
+ @retval SHELL_NOT_FOUND the Alias intended to be deleted was not found\r
+ @retval SHELL_ACCESS_DENIED The alias is a built-in alias or already existed and Replace was set to\r
+ FALSE.\r
+ @retval SHELL_DEVICE_ERROR Command is null or the empty string.\r
+**/\r
+SHELL_STATUS\r
+ShellLevel3CommandsLibSetAlias(\r
+ IN CONST CHAR16 *Command,\r
+ IN CONST CHAR16 *Alias,\r
+ IN BOOLEAN Replace,\r
+ IN BOOLEAN Volatile\r
+ )\r
+{\r
+ SHELL_STATUS ShellStatus;\r
+ EFI_STATUS Status;\r
+\r
+ ShellStatus = SHELL_SUCCESS;\r
+ Status = gEfiShellProtocol->SetAlias (Command, Alias, Replace, Volatile);\r
+ if (EFI_ERROR(Status)) {\r
+ if (Status == EFI_ACCESS_DENIED) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellLevel3HiiHandle, L"alias");\r
+ ShellStatus = SHELL_ACCESS_DENIED;\r
+ } else if (Status == EFI_NOT_FOUND) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_NOT_FOUND), gShellLevel3HiiHandle, L"alias", Command);\r
+ ShellStatus = SHELL_NOT_FOUND;\r
+ } else {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_UK), gShellLevel3HiiHandle, L"alias", Status);\r
+ ShellStatus = SHELL_DEVICE_ERROR;\r
+ }\r
+ }\r
+ return ShellStatus;\r
+}\r
+\r
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
{L"-v", TypeFlag},\r
- {L"-d", TypeFlag},\r
+ {L"-d", TypeValue},\r
{NULL, TypeMax}\r
};\r
\r
SHELL_STATUS ShellStatus;\r
CONST CHAR16 *Param1;\r
CONST CHAR16 *Param2;\r
+ CONST CHAR16 *ParamStrD;\r
CHAR16 *CleanParam2;\r
- CONST CHAR16 *ConstAliasVal;\r
- BOOLEAN Volatile;\r
+ BOOLEAN DeleteFlag;\r
+ BOOLEAN VolatileFlag;\r
\r
ProblemParam = NULL;\r
ShellStatus = SHELL_SUCCESS;\r
Param1 = ShellCommandLineGetRawValue(Package, 1);\r
Param2 = ShellCommandLineGetRawValue(Package, 2);\r
\r
+ DeleteFlag = ShellCommandLineGetFlag (Package, L"-d");\r
+ VolatileFlag = ShellCommandLineGetFlag (Package, L"-v");\r
+\r
if (Param2 != NULL) {\r
CleanParam2 = AllocateCopyPool (StrSize(Param2), Param2);\r
if (CleanParam2 == NULL) {\r
+ ShellCommandLineFreeVarList (Package);\r
return SHELL_OUT_OF_RESOURCES;\r
}\r
\r
}\r
}\r
\r
- //\r
- // check for "-?"\r
- //\r
- if (ShellCommandLineGetFlag(Package, L"-?")) {\r
- ASSERT(FALSE);\r
- }\r
- if (ShellCommandLineGetCount(Package) == 1) {\r
- //\r
- // print out alias'\r
- //\r
- Status = PrintAllShellAlias();\r
- } else if (ShellCommandLineGetFlag(Package, L"-d")) {\r
- //\r
- // delete an alias\r
- //\r
- Status = gEfiShellProtocol->SetAlias(Param1, NULL, TRUE, FALSE);\r
- if (EFI_ERROR(Status)) {\r
- if (Status == EFI_ACCESS_DENIED) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellLevel3HiiHandle, L"alias");\r
- ShellStatus = SHELL_ACCESS_DENIED;\r
- } else if (Status == EFI_NOT_FOUND) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_NOT_FOUND), gShellLevel3HiiHandle, L"alias", Param1);\r
- ShellStatus = SHELL_NOT_FOUND;\r
- } else {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_UK), gShellLevel3HiiHandle, L"alias", Status);\r
- ShellStatus = SHELL_DEVICE_ERROR;\r
- }\r
+ if (!DeleteFlag && !VolatileFlag) {\r
+ switch (ShellCommandLineGetCount (Package)) {\r
+ case 1:\r
+ //\r
+ // "alias"\r
+ //\r
+ ShellStatus = PrintAllShellAlias ();\r
+ break;\r
+ case 2:\r
+ //\r
+ // "alias Param1"\r
+ //\r
+ ShellStatus = PrintSingleShellAlias (Param1);\r
+ break;\r
+ case 3:\r
+ //\r
+ // "alias Param1 CleanParam2"\r
+ //\r
+ ShellStatus = ShellLevel3CommandsLibSetAlias (CleanParam2, Param1, FALSE, VolatileFlag);\r
+ break;\r
+ default:\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel3HiiHandle, L"alias");\r
+ ShellStatus = SHELL_INVALID_PARAMETER;\r
}\r
- } else if (ShellCommandLineGetCount(Package) == 3) {\r
- //\r
- // must be adding an alias\r
- //\r
- Status = gEfiShellProtocol->SetAlias(CleanParam2, Param1, FALSE, ShellCommandLineGetFlag(Package, L"-v"));\r
- if (EFI_ERROR(Status)) {\r
- if (Status == EFI_ACCESS_DENIED) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellLevel3HiiHandle, L"alias"); \r
- ShellStatus = SHELL_ACCESS_DENIED;\r
+ } else if (DeleteFlag) {\r
+ if (VolatileFlag || ShellCommandLineGetCount (Package) > 1) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel3HiiHandle, L"alias");\r
+ ShellStatus = SHELL_INVALID_PARAMETER;\r
+ } else {\r
+ ParamStrD = ShellCommandLineGetValue (Package, L"-d");\r
+ if (ParamStrD == NULL) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellLevel3HiiHandle, L"alias");\r
+ ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_UK), gShellLevel3HiiHandle, L"alias", Status); \r
- ShellStatus = SHELL_DEVICE_ERROR;\r
+ //\r
+ // Delete an alias: "alias -d ParamStrD"\r
+ //\r
+ ShellStatus = ShellLevel3CommandsLibSetAlias (ParamStrD, NULL, TRUE, FALSE);\r
}\r
}\r
- } else if (ShellCommandLineGetCount(Package) == 2) {\r
+ } else {\r
//\r
- // print out a single alias\r
+ // Set volatile alias.\r
//\r
- ConstAliasVal = gEfiShellProtocol->GetAlias(Param1, &Volatile);\r
- if (ConstAliasVal == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellLevel3HiiHandle, L"alias", Param1);\r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else {\r
- if (ShellCommandIsOnAliasList(Param1)) {\r
- Volatile = FALSE;\r
- }\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_ALIAS_OUTPUT), gShellLevel3HiiHandle, !Volatile?L' ':L'*', Param1, ConstAliasVal);\r
- } \r
- } else {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel3HiiHandle, L"alias"); \r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
+ ASSERT (VolatileFlag);\r
+ ASSERT (!DeleteFlag); \r
+ switch (ShellCommandLineGetCount (Package)) {\r
+ case 1:\r
+ case 2:\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellLevel3HiiHandle, L"alias");\r
+ ShellStatus = SHELL_INVALID_PARAMETER;\r
+ break;\r
+ case 3:\r
+ //\r
+ // "alias -v Param1 CleanParam2"\r
+ //\r
+ ShellStatus = ShellLevel3CommandsLibSetAlias (CleanParam2, Param1, FALSE, VolatileFlag);\r
+ break;\r
+ default:\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel3HiiHandle, L"alias");\r
+ ShellStatus = SHELL_INVALID_PARAMETER;\r
+ }\r
}\r
//\r
// free the command line package\r