/** @file function definitions for shell environment functions. the following includes are required: //#include //#include Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _SHELL_ENVIRONMENT_VARIABLE_HEADER_ #define _SHELL_ENVIRONMENT_VARIABLE_HEADER_ typedef struct { LIST_ENTRY Link; CHAR16 *Key; CHAR16 *Val; UINT32 Atts; } ENV_VAR_LIST; // // The list is used to cache the environment variables. // extern ENV_VAR_LIST gShellEnvVarList; /** Reports whether an environment variable is Volatile or Non-Volatile. @param EnvVarName The name of the environment variable in question @param Volatile Return TRUE if the environment variable is volatile @retval EFI_SUCCESS The volatile attribute is returned successfully @retval others Some errors happened. **/ EFI_STATUS IsVolatileEnv ( IN CONST CHAR16 *EnvVarName, OUT BOOLEAN *Volatile ); /** Delete a Non-Volatile environment variable. This will use the Runtime Services call SetVariable to remove a non-volatile variable. @param EnvVarName The name of the environment variable in question @retval EFI_SUCCESS The variable was deleted successfully @retval other An error occurred @sa SetVariable **/ #define SHELL_DELETE_ENVIRONMENT_VARIABLE(EnvVarName) \ (gRT->SetVariable((CHAR16*)EnvVarName, \ &gShellVariableGuid, \ 0, \ 0, \ NULL)) /** Set a Non-Volatile environment variable. This will use the Runtime Services call SetVariable to set a non-volatile variable. @param EnvVarName The name of the environment variable in question @param BufferSize UINTN size of Buffer @param Buffer Pointer to value to set variable to @retval EFI_SUCCESS The variable was changed successfully @retval other An error occurred @sa SetVariable **/ #define SHELL_SET_ENVIRONMENT_VARIABLE_NV(EnvVarName, BufferSize, Buffer) \ (gRT->SetVariable((CHAR16*)EnvVarName, \ &gShellVariableGuid, \ EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS, \ BufferSize, \ (VOID*)Buffer)) /** Get an environment variable. This will use the Runtime Services call GetVariable to get a variable. @param EnvVarName The name of the environment variable in question @param BufferSize Pointer to the UINTN size of Buffer @param Buffer Pointer buffer to get variable value into @retval EFI_SUCCESS The variable's value was retrieved successfully @retval other An error occurred @sa SetVariable **/ #define SHELL_GET_ENVIRONMENT_VARIABLE(EnvVarName, BufferSize, Buffer) \ (gRT->GetVariable((CHAR16*)EnvVarName, \ &gShellVariableGuid, \ 0, \ BufferSize, \ Buffer)) /** Get an environment variable. This will use the Runtime Services call GetVariable to get a variable. @param EnvVarName The name of the environment variable in question @param Atts Pointer to the UINT32 for attributes (or NULL) @param BufferSize Pointer to the UINTN size of Buffer @param Buffer Pointer buffer to get variable value into @retval EFI_SUCCESS The variable's value was retrieved successfully @retval other An error occurred @sa SetVariable **/ #define SHELL_GET_ENVIRONMENT_VARIABLE_AND_ATTRIBUTES(EnvVarName, Atts, BufferSize, Buffer) \ (gRT->GetVariable((CHAR16*)EnvVarName, \ &gShellVariableGuid, \ Atts, \ BufferSize, \ Buffer)) /** Set a Volatile environment variable. This will use the Runtime Services call SetVariable to set a volatile variable. @param EnvVarName The name of the environment variable in question @param BufferSize UINTN size of Buffer @param Buffer Pointer to value to set variable to @retval EFI_SUCCESS The variable was changed successfully @retval other An error occurred @sa SetVariable **/ #define SHELL_SET_ENVIRONMENT_VARIABLE_V(EnvVarName, BufferSize, Buffer) \ (gRT->SetVariable((CHAR16*)EnvVarName, \ &gShellVariableGuid, \ EFI_VARIABLE_BOOTSERVICE_ACCESS, \ BufferSize, \ (VOID*)Buffer)) /** Creates a list of all Shell-Guid-based environment variables. @param[in, out] List The pointer to pointer to LIST_ENTRY object for storing this list. @retval EFI_SUCCESS the list was created successfully. **/ EFI_STATUS GetEnvironmentVariableList ( IN OUT LIST_ENTRY *List ); /** Sets a list of all Shell-Guid-based environment variables. this will also eliminate all pre-existing shell environment variables (even if they are not on the list). This function will also deallocate the memory from List. @param[in] List The pointer to LIST_ENTRY from GetShellEnvVarList(). @retval EFI_SUCCESS The list was Set successfully. **/ EFI_STATUS SetEnvironmentVariableList ( IN LIST_ENTRY *List ); /** sets all Shell-Guid-based environment variables. this will also eliminate all pre-existing shell environment variables (even if they are not on the list). @param[in] Environment Points to a NULL-terminated array of environment variables with the format 'x=y', where x is the environment variable name and y is the value. @retval EFI_SUCCESS The command executed successfully. @retval EFI_INVALID_PARAMETER The parameter is invalid. @retval EFI_OUT_OF_RESOURCES Out of resources. @sa SetEnvironmentVariableList **/ EFI_STATUS SetEnvironmentVariables ( IN CONST CHAR16 **Environment ); /** free function for ENV_VAR_LIST objects. @param[in] List The pointer to pointer to list. **/ VOID FreeEnvironmentVariableList ( IN LIST_ENTRY *List ); /** Find an environment variable in the gShellEnvVarList. @param Key The name of the environment variable. @param Value The value of the environment variable, the buffer shoule be freed by the caller. @param ValueSize The size in bytes of the environment variable including the tailing CHAR_NULL. @param Atts The attributes of the variable. @retval EFI_SUCCESS The command executed successfully. @retval EFI_NOT_FOUND The environment variable is not found in gShellEnvVarList. **/ EFI_STATUS ShellFindEnvVarInList ( IN CONST CHAR16 *Key, OUT CHAR16 **Value, OUT UINTN *ValueSize, OUT UINT32 *Atts OPTIONAL ); /** Add an environment variable into gShellEnvVarList. @param Key The name of the environment variable. @param Value The value of environment variable. @param ValueSize The size in bytes of the environment variable including the tailing CHAR_NULL @param Atts The attributes of the variable. @retval EFI_SUCCESS The environment variable was added to list successfully. @retval others Some errors happened. **/ EFI_STATUS ShellAddEnvVarToList ( IN CONST CHAR16 *Key, IN CONST CHAR16 *Value, IN UINTN ValueSize, IN UINT32 Atts ); /** Remove a specified environment variable in gShellEnvVarList. @param Key The name of the environment variable. @retval EFI_SUCCESS The command executed successfully. @retval EFI_NOT_FOUND The environment variable is not found in gShellEnvVarList. **/ EFI_STATUS ShellRemvoeEnvVarFromList ( IN CONST CHAR16 *Key ); /** Initialize the gShellEnvVarList and cache all Shell-Guid-based environment variables. **/ EFI_STATUS ShellInitEnvVarList ( VOID ); /** Destructe the gShellEnvVarList. **/ VOID ShellFreeEnvVarList ( VOID ); #endif //_SHELL_ENVIRONMENT_VARIABLE_HEADER_