REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the ShellPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
		
			
				
	
	
		
			387 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			387 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   function definitions for internal to shell functions.
 | |
| 
 | |
|   (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>
 | |
|   Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _SHELL_INTERNAL_HEADER_
 | |
| #define _SHELL_INTERNAL_HEADER_
 | |
| 
 | |
| #include <Uefi.h>
 | |
| 
 | |
| #include <Guid/ShellVariableGuid.h>
 | |
| #include <Guid/ShellAliasGuid.h>
 | |
| 
 | |
| #include <Protocol/LoadedImage.h>
 | |
| #include <Protocol/SimpleTextOut.h>
 | |
| #include <Protocol/Shell.h>
 | |
| #include <Protocol/EfiShellInterface.h>
 | |
| #include <Protocol/EfiShellEnvironment2.h>
 | |
| #include <Protocol/ShellParameters.h>
 | |
| #include <Protocol/BlockIo.h>
 | |
| #include <Protocol/HiiPackageList.h>
 | |
| 
 | |
| #include <Library/BaseLib.h>
 | |
| #include <Library/UefiApplicationEntryPoint.h>
 | |
| #include <Library/UefiLib.h>
 | |
| #include <Library/DebugLib.h>
 | |
| #include <Library/MemoryAllocationLib.h>
 | |
| #include <Library/ShellCommandLib.h>
 | |
| #include <Library/UefiRuntimeServicesTableLib.h>
 | |
| #include <Library/UefiBootServicesTableLib.h>
 | |
| #include <Library/DevicePathLib.h>
 | |
| #include <Library/BaseMemoryLib.h>
 | |
| #include <Library/PcdLib.h>
 | |
| #include <Library/ShellLib.h>
 | |
| #include <Library/SortLib.h>
 | |
| #include <Library/HiiLib.h>
 | |
| #include <Library/PrintLib.h>
 | |
| #include <Library/HandleParsingLib.h>
 | |
| #include <Library/FileHandleLib.h>
 | |
| #include <Library/UefiHiiServicesLib.h>
 | |
| 
 | |
| #include "ShellParametersProtocol.h"
 | |
| #include "ShellProtocol.h"
 | |
| #include "ShellEnvVar.h"
 | |
| #include "ConsoleLogger.h"
 | |
| #include "ShellManParser.h"
 | |
| #include "ConsoleWrappers.h"
 | |
| #include "FileHandleWrappers.h"
 | |
| 
 | |
| extern CONST CHAR16  mNoNestingEnvVarName[];
 | |
| extern CONST CHAR16  mNoNestingTrue[];
 | |
| extern CONST CHAR16  mNoNestingFalse[];
 | |
| 
 | |
| typedef struct {
 | |
|   LIST_ENTRY           Link;        ///< Standard linked list handler.
 | |
|   SHELL_FILE_HANDLE    SplitStdOut; ///< ConsoleOut for use in the split.
 | |
|   SHELL_FILE_HANDLE    SplitStdIn;  ///< ConsoleIn for use in the split.
 | |
| } SPLIT_LIST;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT32    Startup      : 1; ///< Was "-startup"       found on command line.
 | |
|   UINT32    NoStartup    : 1; ///< Was "-nostartup"     found on command line.
 | |
|   UINT32    NoConsoleOut : 1; ///< Was "-noconsoleout"  found on command line.
 | |
|   UINT32    NoConsoleIn  : 1; ///< Was "-noconsolein"   found on command line.
 | |
|   UINT32    NoInterrupt  : 1; ///< Was "-nointerrupt"   found on command line.
 | |
|   UINT32    NoMap        : 1; ///< Was "-nomap"         found on command line.
 | |
|   UINT32    NoVersion    : 1; ///< Was "-noversion"     found on command line.
 | |
|   UINT32    Delay        : 1; ///< Was "-delay[:n]      found on command line
 | |
|   UINT32    Exit         : 1; ///< Was "-_exit"         found on command line
 | |
|   UINT32    NoNest       : 1; ///< Was "-nonest"        found on command line
 | |
|   UINT32    Reserved     : 7; ///< Extra bits
 | |
| } SHELL_BITS;
 | |
| 
 | |
| typedef union {
 | |
|   SHELL_BITS    Bits;
 | |
|   UINT16        AllBits;
 | |
| } SHELL_BIT_UNION;
 | |
| 
 | |
| typedef struct {
 | |
|   SHELL_BIT_UNION    BitUnion;
 | |
|   UINTN              Delay;        ///< Seconds of delay default:5.
 | |
|   CHAR16             *FileName;    ///< Filename to run upon successful initialization.
 | |
|   CHAR16             *FileOptions; ///< Options to pass to FileName.
 | |
| } SHELL_INIT_SETTINGS;
 | |
| 
 | |
| typedef struct {
 | |
|   BUFFER_LIST    CommandHistory;
 | |
|   UINTN          VisibleRowNumber;
 | |
|   UINTN          OriginalVisibleRowNumber;
 | |
|   BOOLEAN        InsertMode;                        ///< Is the current typing mode insert (FALSE = overwrite).
 | |
| } SHELL_VIEWING_SETTINGS;
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_SHELL_PARAMETERS_PROTOCOL    *NewShellParametersProtocol;
 | |
|   EFI_SHELL_PROTOCOL               *NewEfiShellProtocol;
 | |
|   BOOLEAN                          PageBreakEnabled;
 | |
|   BOOLEAN                          RootShellInstance;
 | |
|   SHELL_INIT_SETTINGS              ShellInitSettings;
 | |
|   BUFFER_LIST                      BufferToFreeList;  ///< List of buffers that were returned to the user to free.
 | |
|   SHELL_VIEWING_SETTINGS           ViewingSettings;
 | |
|   EFI_HII_HANDLE                   HiiHandle;           ///< Handle from HiiLib.
 | |
|   UINTN                            LogScreenCount;      ///< How many screens of log information to save.
 | |
|   EFI_EVENT                        UserBreakTimer;      ///< Timer event for polling for CTRL-C.
 | |
|   EFI_DEVICE_PATH_PROTOCOL         *ImageDevPath;       ///< DevicePath for ourselves.
 | |
|   EFI_DEVICE_PATH_PROTOCOL         *FileDevPath;        ///< DevicePath for ourselves.
 | |
|   CONSOLE_LOGGER_PRIVATE_DATA      *ConsoleInfo;        ///< Pointer for ConsoleInformation.
 | |
|   EFI_SHELL_PARAMETERS_PROTOCOL    *OldShellParameters; ///< old shell parameters to reinstall upon exiting.
 | |
|   SHELL_PROTOCOL_HANDLE_LIST       OldShellList;        ///< List of other instances to reinstall when closing.
 | |
|   SPLIT_LIST                       SplitList;           ///< List of Splits in FILO stack.
 | |
|   VOID                             *CtrlCNotifyHandle1; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
 | |
|   VOID                             *CtrlCNotifyHandle2; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
 | |
|   VOID                             *CtrlCNotifyHandle3; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
 | |
|   VOID                             *CtrlCNotifyHandle4; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
 | |
|   VOID                             *CtrlSNotifyHandle1; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
 | |
|   VOID                             *CtrlSNotifyHandle2; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
 | |
|   VOID                             *CtrlSNotifyHandle3; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
 | |
|   VOID                             *CtrlSNotifyHandle4; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
 | |
|   BOOLEAN                          HaltOutput;          ///< TRUE to start a CTRL-S halt.
 | |
| } SHELL_INFO;
 | |
| 
 | |
| #pragma pack(1)
 | |
| ///
 | |
| /// HII specific Vendor Device Path definition.
 | |
| ///
 | |
| typedef struct {
 | |
|   VENDOR_DEVICE_PATH          VendorDevicePath;
 | |
|   EFI_DEVICE_PATH_PROTOCOL    End;
 | |
| } SHELL_MAN_HII_VENDOR_DEVICE_PATH;
 | |
| #pragma pack()
 | |
| 
 | |
| extern SHELL_INFO  ShellInfoObject;
 | |
| 
 | |
| /**
 | |
|   Converts the command line to its post-processed form.  this replaces variables and alias' per UEFI Shell spec.
 | |
| 
 | |
|   @param[in,out] CmdLine        pointer to the command line to update
 | |
| 
 | |
|   @retval EFI_SUCCESS           The operation was successful
 | |
|   @retval EFI_OUT_OF_RESOURCES  A memory allocation failed.
 | |
|   @return                       some other error occurred
 | |
| **/
 | |
| EFI_STATUS
 | |
| ProcessCommandLineToFinal (
 | |
|   IN OUT CHAR16  **CmdLine
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Function to update the shell variable "lasterror".
 | |
| 
 | |
|   @param[in] ErrorCode      the error code to put into lasterror
 | |
| **/
 | |
| EFI_STATUS
 | |
| SetLastError (
 | |
|   IN CONST SHELL_STATUS  ErrorCode
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Sets all the alias' that were registered with the ShellCommandLib library.
 | |
| 
 | |
|   @retval EFI_SUCCESS           all init commands were run successfully.
 | |
| **/
 | |
| EFI_STATUS
 | |
| SetBuiltInAlias (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function will populate the 2 device path protocol parameters based on the
 | |
|   global gImageHandle.  the DevPath will point to the device path for the handle that has
 | |
|   loaded image protocol installed on it.  the FilePath will point to the device path
 | |
|   for the file that was loaded.
 | |
| 
 | |
|   @param[in, out] DevPath       on a successful return the device path to the loaded image
 | |
|   @param[in, out] FilePath      on a successful return the device path to the file
 | |
| 
 | |
|   @retval EFI_SUCCESS           the 2 device paths were successfully returned.
 | |
|   @return other                 a error from gBS->HandleProtocol
 | |
| 
 | |
|   @sa HandleProtocol
 | |
| **/
 | |
| EFI_STATUS
 | |
| GetDevicePathsForImageAndFile (
 | |
|   IN OUT EFI_DEVICE_PATH_PROTOCOL  **DevPath,
 | |
|   IN OUT EFI_DEVICE_PATH_PROTOCOL  **FilePath
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Process all Uefi Shell 2.0 command line options.
 | |
| 
 | |
|   see Uefi Shell 2.0 section 3.2 for full details.
 | |
| 
 | |
|   the command line should resemble the following:
 | |
| 
 | |
|   shell.efi [ShellOpt-options] [options] [file-name [file-name-options]]
 | |
| 
 | |
|   ShellOpt options  Options which control the initialization behavior of the shell.
 | |
|                     These options are read from the EFI global variable "ShellOpt"
 | |
|                     and are processed before options or file-name.
 | |
| 
 | |
|   options           Options which control the initialization behavior of the shell.
 | |
| 
 | |
|   file-name         The name of a UEFI shell application or script to be executed
 | |
|                     after initialization is complete. By default, if file-name is
 | |
|                     specified, then -nostartup is implied. Scripts are not supported
 | |
|                     by level 0.
 | |
| 
 | |
|   file-nameoptions  The command-line options that are passed to file-name when it
 | |
|                     is invoked.
 | |
| 
 | |
|   This will initialize the ShellInitSettings global variable.
 | |
| 
 | |
|   @retval EFI_SUCCESS           the variable is initialized.
 | |
| **/
 | |
| EFI_STATUS
 | |
| ProcessCommandLine (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Handles all interaction with the default startup script.
 | |
| 
 | |
|   this will check that the correct command line parameters were passed, handle the delay, and then start running the script.
 | |
| 
 | |
|   @param[in] ImagePath          The path to the image for shell.  The first place to look for the startup script.
 | |
|   @param[in] FilePath           The path to the file for shell.  The second place to look for the startup script.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The variable is initialized.
 | |
| **/
 | |
| EFI_STATUS
 | |
| DoStartupScript (
 | |
|   IN EFI_DEVICE_PATH_PROTOCOL  *ImagePath,
 | |
|   IN EFI_DEVICE_PATH_PROTOCOL  *FilePath
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Function to perform the shell prompt looping.  It will do a single prompt,
 | |
|   dispatch the result, and then return.  It is expected that the caller will
 | |
|   call this function in a loop many times.
 | |
| 
 | |
|   @retval EFI_SUCCESS
 | |
|   @retval RETURN_ABORTED
 | |
| **/
 | |
| EFI_STATUS
 | |
| DoShellPrompt (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Add a buffer to the Buffer To Free List for safely returning buffers to other
 | |
|   places without risking letting them modify internal shell information.
 | |
| 
 | |
|   @param Buffer   Something to pass to FreePool when the shell is exiting.
 | |
| **/
 | |
| VOID *
 | |
| AddBufferToFreeList (
 | |
|   VOID  *Buffer
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Add a buffer to the Command History List.
 | |
| 
 | |
|   @param Buffer[in]     The line buffer to add.
 | |
| **/
 | |
| VOID
 | |
| AddLineToCommandHistory (
 | |
|   IN CONST CHAR16  *Buffer
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Function will process and run a command line.
 | |
| 
 | |
|   This will determine if the command line represents an internal shell command or dispatch an external application.
 | |
| 
 | |
|   @param[in] CmdLine  the command line to parse
 | |
| 
 | |
|   @retval EFI_SUCCESS     the command was completed
 | |
|   @retval EFI_ABORTED     the command's operation was aborted
 | |
| **/
 | |
| EFI_STATUS
 | |
| RunCommand (
 | |
|   IN CONST CHAR16  *CmdLine
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Function will process and run a command line.
 | |
| 
 | |
|   This will determine if the command line represents an internal shell
 | |
|   command or dispatch an external application.
 | |
| 
 | |
|   @param[in] CmdLine      The command line to parse.
 | |
|   @param[out] CommandStatus   The status from the command line.
 | |
| 
 | |
|   @retval EFI_SUCCESS     The command was completed.
 | |
|   @retval EFI_ABORTED     The command's operation was aborted.
 | |
| **/
 | |
| EFI_STATUS
 | |
| RunShellCommand (
 | |
|   IN CONST CHAR16  *CmdLine,
 | |
|   OUT EFI_STATUS   *CommandStatus
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Function to process a NSH script file via SHELL_FILE_HANDLE.
 | |
| 
 | |
|   @param[in] Handle             The handle to the already opened file.
 | |
|   @param[in] Name               The name of the script file.
 | |
| 
 | |
|   @retval EFI_SUCCESS           the script completed successfully
 | |
| **/
 | |
| EFI_STATUS
 | |
| RunScriptFileHandle (
 | |
|   IN SHELL_FILE_HANDLE  Handle,
 | |
|   IN CONST CHAR16       *Name
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Function to process a NSH script file.
 | |
| 
 | |
|   @param[in] ScriptPath         Pointer to the script file name (including file system path).
 | |
|   @param[in] Handle             the handle of the script file already opened.
 | |
|   @param[in] CmdLine            the command line to run.
 | |
|   @param[in] ParamProtocol      the shell parameters protocol pointer
 | |
| 
 | |
|   @retval EFI_SUCCESS           the script completed successfully
 | |
| **/
 | |
| EFI_STATUS
 | |
| RunScriptFile (
 | |
|   IN CONST CHAR16                   *ScriptPath,
 | |
|   IN SHELL_FILE_HANDLE              Handle OPTIONAL,
 | |
|   IN CONST CHAR16                   *CmdLine,
 | |
|   IN EFI_SHELL_PARAMETERS_PROTOCOL  *ParamProtocol
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Return the pointer to the first occurrence of any character from a list of characters.
 | |
| 
 | |
|   @param[in] String           the string to parse
 | |
|   @param[in] CharacterList    the list of character to look for
 | |
|   @param[in] EscapeCharacter  An escape character to skip
 | |
| 
 | |
|   @return the location of the first character in the string
 | |
|   @retval CHAR_NULL no instance of any character in CharacterList was found in String
 | |
| **/
 | |
| CONST CHAR16 *
 | |
| FindFirstCharacter (
 | |
|   IN CONST CHAR16  *String,
 | |
|   IN CONST CHAR16  *CharacterList,
 | |
|   IN CONST CHAR16  EscapeCharacter
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Cleans off leading and trailing spaces and tabs.
 | |
| 
 | |
|   @param[in] String pointer to the string to trim them off.
 | |
| **/
 | |
| EFI_STATUS
 | |
| TrimSpaces (
 | |
|   IN CHAR16  **String
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Create a new buffer list and stores the old one to OldBufferList
 | |
| 
 | |
|   @param OldBufferList   The temporary list head used to store the nodes in BufferToFreeList.
 | |
| **/
 | |
| VOID
 | |
| SaveBufferList (
 | |
|   OUT LIST_ENTRY  *OldBufferList
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Restore previous nodes into BufferToFreeList .
 | |
| 
 | |
|   @param OldBufferList   The temporary list head used to store the nodes in BufferToFreeList.
 | |
| **/
 | |
| VOID
 | |
| RestoreBufferList (
 | |
|   IN OUT LIST_ENTRY  *OldBufferList
 | |
|   );
 | |
| 
 | |
| #endif //_SHELL_INTERNAL_HEADER_
 |