123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795 |
- /** @file
- Provides interface to shell internal functions for shell commands.
- This library is for use ONLY by shell commands linked into the shell application.
- This library will not function if it is used for UEFI Shell 2.0 Applications.
- Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
- (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
- (C) Copyright 2013-2014 Hewlett-Packard Development Company, L.P.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #ifndef _SHELL_COMMAND_LIB_
- #define _SHELL_COMMAND_LIB_
- #include <Uefi.h>
- #include <Protocol/Shell.h>
- #include <Protocol/ShellParameters.h>
- #include <Protocol/UnicodeCollation.h>
- #include <Protocol/SimpleFileSystem.h>
- #include <Library/UefiBootServicesTableLib.h>
- //
- // The extern global protocol poionters.
- //
- extern EFI_UNICODE_COLLATION_PROTOCOL *gUnicodeCollation;
- extern CONST CHAR16 *SupportLevel[];
- //
- // The map list objects.
- //
- typedef struct {
- LIST_ENTRY Link;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- CHAR16 *MapName;
- CHAR16 *CurrentDirectoryPath;
- UINT64 Flags;
- } SHELL_MAP_LIST;
- /// List of Mappings - DeviceName and Drive Letter(ism).
- extern SHELL_MAP_LIST gShellMapList;
- /// Pointer to node of current directory in the mMapList.
- extern SHELL_MAP_LIST *gShellCurMapping;
- /**
- Returns the help MAN fileName for a given shell command.
- @retval !NULL The unicode string of the MAN filename.
- @retval NULL An error ocurred.
- **/
- typedef
- CONST CHAR16 *
- (EFIAPI *SHELL_GET_MAN_FILENAME)(
- VOID
- );
- /**
- Runs a shell command on a given command line.
- The specific operation of a given shell command is specified in the UEFI Shell
- Specification 2.0, or in the source of the given command.
- Upon completion of the command run the shell protocol and environment variables
- may have been updated due to the operation.
- @param[in] ImageHandle The ImageHandle to the app, or NULL if
- the command built into shell.
- @param[in] SystemTable The pointer to the system table.
- @retval RETURN_SUCCESS The shell command was sucessful.
- @retval RETURN_UNSUPPORTED The command is not supported.
- **/
- typedef
- SHELL_STATUS
- (EFIAPI *SHELL_RUN_COMMAND)(
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- );
- /**
- Registers the handlers of type SHELL_RUN_COMMAND and
- SHELL_GET_MAN_FILENAME for each shell command.
- If the ShellSupportLevel is greater than the value of
- PcdShellSupportLevel, then return RETURN_UNSUPPORTED.
- Registers the the handlers specified by GetHelpInfoHandler and CommandHandler
- with the command specified by CommandString. If the command named by
- CommandString has already been registered, then return
- RETURN_ALREADY_STARTED.
- If there are not enough resources available to register the handlers, then
- RETURN_OUT_OF_RESOURCES is returned.
- If CommandString is NULL, then ASSERT().
- If GetHelpInfoHandler is NULL, then ASSERT().
- If CommandHandler is NULL, then ASSERT().
- If ProfileName is NULL, then ASSERT().
- @param[in] CommandString The pointer to the command name. This is the
- name to look for on the command line in
- the shell.
- @param[in] CommandHandler The pointer to a function that runs the
- specified command.
- @param[in] GetManFileName The pointer to a function that provides man
- filename.
- @param[in] ShellMinSupportLevel The minimum Shell Support Level which has this
- function.
- @param[in] ProfileName The profile name to require for support of this
- function.
- @param[in] CanAffectLE Indicates whether this command's return value
- can change the LASTERROR environment variable.
- @param[in] HiiHandle The handle of this command's HII entry.
- @param[in] ManFormatHelp The HII locator for the help text.
- @retval RETURN_SUCCESS The handlers were registered.
- @retval RETURN_OUT_OF_RESOURCES There are not enough resources available to
- register the shell command.
- @retval RETURN_UNSUPPORTED The ShellMinSupportLevel was higher than the
- currently allowed support level.
- @retval RETURN_ALREADY_STARTED The CommandString represents a command that
- is already registered. Only one handler set for
- a given command is allowed.
- @sa SHELL_GET_MAN_FILENAME
- @sa SHELL_RUN_COMMAND
- **/
- RETURN_STATUS
- EFIAPI
- ShellCommandRegisterCommandName (
- IN CONST CHAR16 *CommandString,
- IN SHELL_RUN_COMMAND CommandHandler,
- IN SHELL_GET_MAN_FILENAME GetManFileName,
- IN UINT32 ShellMinSupportLevel,
- IN CONST CHAR16 *ProfileName,
- IN CONST BOOLEAN CanAffectLE,
- IN CONST EFI_HII_HANDLE HiiHandle,
- IN CONST EFI_STRING_ID ManFormatHelp
- );
- /**
- Checks if a command string has been registered for CommandString, and if so, it runs
- the previously registered handler for that command with the command line.
- If CommandString is NULL, then ASSERT().
- If Sections is specified, then each section name listed will be compared in a case sensitive
- manner to the section names described in Appendix B UEFI Shell 2.0 Specification. If the section exists,
- it is appended to the returned help text. If the section does not exist, no
- information is returned. If Sections is NULL, then all help text information
- available is returned.
- @param[in] CommandString The pointer to the command name. This is the name
- found on the command line in the shell.
- @param[in, out] RetVal The pointer to the return value from the command handler.
- @param[in, out] CanAffectLE Indicates whether this command's return value
- needs to be placed into LASTERROR environment variable.
- @retval RETURN_SUCCESS The handler was run.
- @retval RETURN_NOT_FOUND The CommandString did not match a registered
- command name.
- @sa SHELL_RUN_COMMAND
- **/
- RETURN_STATUS
- EFIAPI
- ShellCommandRunCommandHandler (
- IN CONST CHAR16 *CommandString,
- IN OUT SHELL_STATUS *RetVal,
- IN OUT BOOLEAN *CanAffectLE OPTIONAL
- );
- /**
- Checks if a command string has been registered for CommandString, and if so, it
- returns the MAN filename specified for that command.
- If CommandString is NULL, then ASSERT().
- @param[in] CommandString The pointer to the command name. This is the name
- found on the command line in the shell.
- @retval NULL The CommandString was not a registered command.
- @retval other The name of the MAN file.
- @sa SHELL_GET_MAN_FILENAME
- **/
- CONST CHAR16 *
- EFIAPI
- ShellCommandGetManFileNameHandler (
- IN CONST CHAR16 *CommandString
- );
- typedef struct {
- LIST_ENTRY Link;
- CHAR16 *CommandString;
- } COMMAND_LIST;
- /**
- Get the list of all available shell internal commands. This is a linked list,
- via the LIST_ENTRY structure. Enumerate through it using the BaseLib linked
- list functions. Do not modify the values.
- @param[in] Sort TRUE to alphabetically sort the values first. FALSE otherwise.
- @return A linked list of all available shell commands.
- **/
- CONST COMMAND_LIST *
- EFIAPI
- ShellCommandGetCommandList (
- IN CONST BOOLEAN Sort
- );
- typedef struct {
- LIST_ENTRY Link;
- CHAR16 *CommandString;
- CHAR16 *Alias;
- } ALIAS_LIST;
- /**
- Registers aliases to be set as part of the initialization of the shell application.
- If Command is NULL, then ASSERT().
- If Alias is NULL, then ASSERT().
- @param[in] Command The pointer to the Command.
- @param[in] Alias The pointer to Alias.
- @retval RETURN_SUCCESS The handlers were registered.
- @retval RETURN_OUT_OF_RESOURCES There are not enough resources available to
- register the shell command.
- **/
- RETURN_STATUS
- EFIAPI
- ShellCommandRegisterAlias (
- IN CONST CHAR16 *Command,
- IN CONST CHAR16 *Alias
- );
- /**
- Get the list of all shell alias commands. This is a linked list,
- via LIST_ENTRY structure. Enumerate through it using the BaseLib linked
- list functions. Do not modify the values.
- @return A linked list of all requested shell aliases.
- **/
- CONST ALIAS_LIST *
- EFIAPI
- ShellCommandGetInitAliasList (
- VOID
- );
- /**
- Determine if a given alias is on the list of built in aliases.
- @param[in] Alias The alias to test for.
- @retval TRUE The alias is a built in alias.
- @retval FALSE The alias is not a built in alias.
- **/
- BOOLEAN
- EFIAPI
- ShellCommandIsOnAliasList (
- IN CONST CHAR16 *Alias
- );
- /**
- Checks if a command is already on the list.
- @param[in] CommandString The command string to check for on the list.
- @retval TRUE CommandString represents a registered command.
- @retval FALSE CommandString does not represent a registered command.
- **/
- BOOLEAN
- EFIAPI
- ShellCommandIsCommandOnList (
- IN CONST CHAR16 *CommandString
- );
- /**
- Get the help text for a command.
- @param[in] CommandString The command name.
- @retval NULL No help text was found.
- @return The string of the help text. The caller required to free.
- **/
- CHAR16 *
- EFIAPI
- ShellCommandGetCommandHelp (
- IN CONST CHAR16 *CommandString
- );
- /**
- Function to make sure that the above pointers are valid.
- **/
- EFI_STATUS
- EFIAPI
- CommandInit (
- VOID
- );
- /**
- Function to determine current state of ECHO. Echo determines if lines from scripts
- and ECHO commands are enabled.
- @retval TRUE Echo is currently enabled.
- @retval FALSE Echo is currently disabled.
- **/
- BOOLEAN
- EFIAPI
- ShellCommandGetEchoState (
- VOID
- );
- /**
- Function to set current state of ECHO. Echo determines if lines from scripts
- and ECHO commands are enabled.
- @param[in] State TRUE to enable Echo, FALSE otherwise.
- **/
- VOID
- EFIAPI
- ShellCommandSetEchoState (
- IN BOOLEAN State
- );
- /**
- Indicate that the current shell or script should exit.
- @param[in] ScriptOnly TRUE if exiting a script; FALSE otherwise.
- @param[in] ErrorCode The 64 bit error code to return.
- **/
- VOID
- EFIAPI
- ShellCommandRegisterExit (
- IN BOOLEAN ScriptOnly,
- IN CONST UINT64 ErrorCode
- );
- /**
- Retrieve the Exit code.
- @return the value passed into RegisterExit.
- **/
- UINT64
- EFIAPI
- ShellCommandGetExitCode (
- VOID
- );
- /**
- Retrieve the Exit indicator.
- @retval TRUE Exit was indicated.
- @retval FALSE Exit was not indicated.
- **/
- BOOLEAN
- EFIAPI
- ShellCommandGetExit (
- VOID
- );
- /**
- Retrieve the Exit script indicator.
- If ShellCommandGetExit returns FALSE, then the return from this is undefined.
- @retval TRUE ScriptOnly was indicated.
- @retval FALSE ScriptOnly was not indicated.
- **/
- BOOLEAN
- EFIAPI
- ShellCommandGetScriptExit (
- VOID
- );
- typedef struct {
- LIST_ENTRY Link; ///< List enumerator items.
- UINTN Line; ///< What line of the script file this was on.
- CHAR16 *Cl; ///< The original command line.
- VOID *Data; ///< The data structure format dependant upon Command. (not always used)
- BOOLEAN Reset; ///< Reset the command (it must be treated like a initial run (but it may have data already))
- } SCRIPT_COMMAND_LIST;
- typedef struct {
- CHAR16 *ScriptName; ///< The filename of this script.
- CHAR16 **Argv; ///< The parmameters to the script file.
- UINTN Argc; ///< The count of parameters.
- LIST_ENTRY CommandList; ///< The script converted to a list of commands (SCRIPT_COMMAND_LIST objects).
- SCRIPT_COMMAND_LIST *CurrentCommand; ///< The command currently being operated. If !=NULL must be a member of CommandList.
- LIST_ENTRY SubstList; ///< A list of current script loop alias' (ALIAS_LIST objects) (Used for the for %-based replacement).
- } SCRIPT_FILE;
- /**
- Function to return a pointer to the currently running script file object.
- @retval NULL A script file is not currently running.
- @return A pointer to the current script file object.
- **/
- SCRIPT_FILE *
- EFIAPI
- ShellCommandGetCurrentScriptFile (
- VOID
- );
- /**
- Function to set a new script as the currently running one.
- This function will correctly stack and unstack nested scripts.
- @param[in] Script The pointer to new script information structure. If NULL,
- it removes and de-allocates the topmost Script structure.
- @return A pointer to the current running script file after this
- change. It is NULL if removing the final script.
- **/
- SCRIPT_FILE *
- EFIAPI
- ShellCommandSetNewScript (
- IN SCRIPT_FILE *Script OPTIONAL
- );
- /**
- Function to cleanup all memory from a SCRIPT_FILE structure.
- @param[in] Script The pointer to the structure to cleanup.
- **/
- VOID
- EFIAPI
- DeleteScriptFileStruct (
- IN SCRIPT_FILE *Script
- );
- /**
- Function to get the current Profile string.
- This is used to retrieve what profiles were installed.
- @retval NULL There are no installed profiles.
- @return A semicolon-delimited list of profiles.
- **/
- CONST CHAR16 *
- EFIAPI
- ShellCommandGetProfileList (
- VOID
- );
- typedef enum {
- MappingTypeFileSystem,
- MappingTypeBlockIo,
- MappingTypeMax
- } SHELL_MAPPING_TYPE;
- /**
- Function to generate the next default mapping name.
- If the return value is not NULL then it must be callee freed.
- @param Type What kind of mapping name to make.
- @retval NULL a memory allocation failed.
- @return a new map name string
- **/
- CHAR16 *
- EFIAPI
- ShellCommandCreateNewMappingName (
- IN CONST SHELL_MAPPING_TYPE Type
- );
- /**
- Function to initialize the table for creating consistent map names.
- @param[out] Table The pointer to pointer to pointer to DevicePathProtocol object.
- @retval EFI_SUCCESS The table was created successfully.
- **/
- EFI_STATUS
- EFIAPI
- ShellCommandConsistMappingInitialize (
- EFI_DEVICE_PATH_PROTOCOL ***Table
- );
- /**
- Function to uninitialize the table for creating consistent map names.
- The parameter must have been received from ShellCommandConsistMappingInitialize.
- @param[out] Table The pointer to pointer to DevicePathProtocol object.
- @retval EFI_SUCCESS The table was deleted successfully.
- **/
- EFI_STATUS
- EFIAPI
- ShellCommandConsistMappingUnInitialize (
- EFI_DEVICE_PATH_PROTOCOL **Table
- );
- /**
- Create a consistent mapped name for the device specified by DevicePath
- based on the Table.
- This must be called after ShellCommandConsistMappingInitialize() and
- before ShellCommandConsistMappingUnInitialize() is called.
- @param[in] DevicePath The pointer to the dev path for the device.
- @param[in] Table The Table of mapping information.
- @retval NULL A consistent mapped name could not be created.
- @return A pointer to a string allocated from pool with the device name.
- **/
- CHAR16 *
- EFIAPI
- ShellCommandConsistMappingGenMappingName (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- IN EFI_DEVICE_PATH_PROTOCOL **Table
- );
- /**
- Function to search the list of mappings for the first matching node on the
- list based on the MapKey.
- @param[in] MapKey The pointer to the string key to search for in the map.
- @return the node on the list.
- **/
- SHELL_MAP_LIST *
- EFIAPI
- ShellCommandFindMapItem (
- IN CONST CHAR16 *MapKey
- );
- /**
- Function to add a map node to the list of map items and update the "path" environment variable (optionally).
- If Path is TRUE (during initialization only), the path environment variable will also be updated to include
- default paths on the new map name...
- Path should be FALSE when this function is called from the protocol SetMap function.
- @param[in] Name The human readable mapped name.
- @param[in] DevicePath The Device Path for this map.
- @param[in] Flags The Flags attribute for this map item.
- @param[in] Path TRUE to update path, FALSE to skip this step (should only be TRUE during initialization).
- @retval EFI_SUCCESS The addition was sucessful.
- @retval EFI_OUT_OF_RESOURCES A memory allocation failed.
- @retval EFI_INVALID_PARAMETER A parameter was invalid.
- **/
- EFI_STATUS
- EFIAPI
- ShellCommandAddMapItemAndUpdatePath (
- IN CONST CHAR16 *Name,
- IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- IN CONST UINT64 Flags,
- IN CONST BOOLEAN Path
- );
- /**
- Creates the default map names for each device path in the system with
- a protocol depending on the Type.
- Also sets up the default path environment variable if Type is FileSystem.
- @retval EFI_SUCCESS All map names were created sucessfully.
- @retval EFI_NOT_FOUND No protocols were found in the system.
- @return Error returned from gBS->LocateHandle().
- @sa LocateHandle
- **/
- EFI_STATUS
- EFIAPI
- ShellCommandCreateInitialMappingsAndPaths (
- VOID
- );
- /**
- Add mappings for any devices without one. Do not change any existing maps.
- @retval EFI_SUCCESS The operation was successful.
- **/
- EFI_STATUS
- EFIAPI
- ShellCommandUpdateMapping (
- VOID
- );
- /**
- Converts a SHELL_FILE_HANDLE to an EFI_FILE_PROTOCOL*.
- @param[in] Handle The SHELL_FILE_HANDLE to convert.
- @return a EFI_FILE_PROTOCOL* representing the same file.
- **/
- EFI_FILE_PROTOCOL *
- EFIAPI
- ConvertShellHandleToEfiFileProtocol (
- IN CONST SHELL_FILE_HANDLE Handle
- );
- /**
- Remove a SHELL_FILE_HANDLE frmo the list of SHELL_FILE_HANDLES.
- @param[in] Handle The SHELL_FILE_HANDLE to remove.
- @retval TRUE The item was removed.
- @retval FALSE The item was not found.
- **/
- BOOLEAN
- EFIAPI
- ShellFileHandleRemove (
- IN CONST SHELL_FILE_HANDLE Handle
- );
- /**
- Converts a EFI_FILE_PROTOCOL* to an SHELL_FILE_HANDLE.
- @param[in] Handle The pointer to EFI_FILE_PROTOCOL to convert.
- @param[in] Path The path to the file for verification.
- @return a SHELL_FILE_HANDLE representing the same file.
- **/
- SHELL_FILE_HANDLE
- EFIAPI
- ConvertEfiFileProtocolToShellHandle (
- IN CONST EFI_FILE_PROTOCOL *Handle,
- IN CONST CHAR16 *Path
- );
- /**
- Find the path that was logged with the specified SHELL_FILE_HANDLE.
- @param[in] Handle The SHELL_FILE_HANDLE to query on.
- @return A pointer to the path for the file.
- **/
- CONST CHAR16 *
- EFIAPI
- ShellFileHandleGetPath (
- IN CONST SHELL_FILE_HANDLE Handle
- );
- /**
- Function to determine if a SHELL_FILE_HANDLE is at the end of the file.
- This will NOT work on directories.
- If Handle is NULL, then ASSERT.
- @param[in] Handle the file handle
- @retval TRUE the position is at the end of the file
- @retval FALSE the position is not at the end of the file
- **/
- BOOLEAN
- EFIAPI
- ShellFileHandleEof (
- IN SHELL_FILE_HANDLE Handle
- );
- typedef struct {
- LIST_ENTRY Link;
- void *Buffer;
- } BUFFER_LIST;
- /**
- Frees any BUFFER_LIST defined type.
- @param[in] List The pointer to the list head.
- **/
- VOID
- EFIAPI
- FreeBufferList (
- IN BUFFER_LIST *List
- );
- /**
- Function printing hex output to the console.
- @param[in] Indent Number of spaces to indent.
- @param[in] Offset Offset to start with.
- @param[in] DataSize Length of data.
- @param[in] UserData Pointer to some data.
- **/
- VOID
- EFIAPI
- DumpHex (
- IN UINTN Indent,
- IN UINTN Offset,
- IN UINTN DataSize,
- IN VOID *UserData
- );
- /**
- Dump HEX data into buffer.
- @param[in] Buffer HEX data to be dumped in Buffer.
- @param[in] Indent How many spaces to indent the output.
- @param[in] Offset The offset of the printing.
- @param[in] DataSize The size in bytes of UserData.
- @param[in] UserData The data to print out.
- **/
- CHAR16 *
- EFIAPI
- CatSDumpHex (
- IN CHAR16 *Buffer,
- IN UINTN Indent,
- IN UINTN Offset,
- IN UINTN DataSize,
- IN VOID *UserData
- );
- //
- // Determines the ordering operation for ShellSortFileList().
- //
- typedef enum {
- //
- // Sort the EFI_SHELL_FILE_INFO objects by the FileName field, in increasing
- // order, using gUnicodeCollation->StriColl().
- //
- ShellSortFileListByFileName,
- //
- // Sort the EFI_SHELL_FILE_INFO objects by the FullName field, in increasing
- // order, using gUnicodeCollation->StriColl().
- //
- ShellSortFileListByFullName,
- ShellSortFileListMax
- } SHELL_SORT_FILE_LIST;
- /**
- Sort an EFI_SHELL_FILE_INFO list, optionally moving duplicates to a separate
- list.
- @param[in,out] FileList The list of EFI_SHELL_FILE_INFO objects to sort.
- If FileList is NULL on input, then FileList is
- considered an empty, hence already sorted, list.
- Otherwise, if (*FileList) is NULL on input, then
- EFI_INVALID_PARAMETER is returned.
- Otherwise, the caller is responsible for having
- initialized (*FileList)->Link with
- InitializeListHead(). No other fields in the
- (**FileList) head element are accessed by this
- function.
- On output, (*FileList) is sorted according to Order.
- If Duplicates is NULL on input, then duplicate
- elements are preserved, sorted stably, on
- (*FileList). If Duplicates is not NULL on input,
- then duplicates are moved (stably sorted) to the
- new, dynamically allocated (*Duplicates) list.
- @param[out] Duplicates If Duplicates is NULL on input, (*FileList) will be
- a monotonically ordered list on output, with
- duplicates stably sorted.
- If Duplicates is not NULL on input, (*FileList) will
- be a strictly monotonically oredered list on output,
- with duplicates separated (stably sorted) to
- (*Duplicates). All fields except Link will be
- zero-initialized in the (**Duplicates) head element.
- If no duplicates exist, then (*Duplicates) is set to
- NULL on output.
- @param[in] Order Determines the comparison operation between
- EFI_SHELL_FILE_INFO objects.
- @retval EFI_INVALID_PARAMETER (UINTN)Order is greater than or equal to
- (UINTN)ShellSortFileListMax. Neither the
- (*FileList) nor the (*Duplicates) list has
- been modified.
- @retval EFI_INVALID_PARAMETER (*FileList) was NULL on input. Neither the
- (*FileList) nor the (*Duplicates) list has
- been modified.
- @retval EFI_OUT_OF_RESOURCES Memory allocation failed. Neither the
- (*FileList) nor the (*Duplicates) list has
- been modified.
- @retval EFI_SUCCESS Sorting successful, including the case when
- FileList is NULL on input.
- **/
- EFI_STATUS
- EFIAPI
- ShellSortFileList (
- IN OUT EFI_SHELL_FILE_INFO **FileList,
- OUT EFI_SHELL_FILE_INFO **Duplicates OPTIONAL,
- IN SHELL_SORT_FILE_LIST Order
- );
- #endif //_SHELL_COMMAND_LIB_
|