ShellPkg: add API for determining operation type

There are no callers for this new API yet.  They will be added in the next commits.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jaben Carsey <jaben.carsey@intel.com>
Reviewed-by: Erik Bjorge <erik.c.bjorge@intel.com>


git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14975 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Jaben Carsey 2013-12-13 00:13:59 +00:00 committed by jcarsey
parent 1ef61d0390
commit 6ba2921da3
2 changed files with 69 additions and 0 deletions

View File

@ -1527,6 +1527,67 @@ ShellSubstituteAliases(
return (EFI_SUCCESS);
}
/**
Takes the Argv[0] part of the command line and determine the meaning of it.
**/
SHELL_OPERATION_TYPES
EFIAPI
GetOperationType(
IN CONST CHAR16 *CmdName
)
{
CHAR16* FileWithPath;
CONST CHAR16* TempLocation;
CONST CHAR16* TempLocation2;
FileWithPath = NULL;
//
// test for an internal command.
//
if (ShellCommandIsCommandOnList(CmdName)) {
return (INTERNAL_COMMAND);
}
//
// Test for file system change request. anything ending with : and cant have spaces.
//
if (CmdName[(StrLen(CmdName)-1)] == L':') {
if (StrStr(CmdName, L" ") != NULL) {
return (UNKNOWN_INVALID);
}
return (FILE_SYS_CHANGE);
}
//
// Test for a file
//
if ((FileWithPath = ShellFindFilePathEx(CmdName, mExecutableExtensions)) != NULL) {
//
// See if that file has a script file extension
//
if (StrLen(FileWithPath) > 4) {
TempLocation = FileWithPath+StrLen(FileWithPath)-4;
TempLocation2 = mScriptExtension;
if (StringNoCaseCompare((VOID*)(&TempLocation), (VOID*)(&TempLocation2)) == 0) {
SHELL_FREE_NON_NULL(FileWithPath);
return (SCRIPT_FILE_NAME);
}
}
//
// Was a file, but not a script. we treat this as an application.
//
SHELL_FREE_NON_NULL(FileWithPath);
return (EFI_APPLICATION);
}
SHELL_FREE_NON_NULL(FileWithPath);
//
// No clue what this is... return invalid flag...
//
return (UNKNOWN_INVALID);
}
/**
Function will process and run a command line.

View File

@ -124,6 +124,14 @@ typedef struct {
extern SHELL_INFO ShellInfoObject;
typedef enum {
INTERNAL_COMMAND,
SCRIPT_FILE_NAME,
EFI_APPLICATION,
FILE_SYS_CHANGE,
UNKNOWN_INVALID
} SHELL_OPERATION_TYPES;
/**
Sets all the alias' that were registered with the ShellCommandLib library.