From daf705847f33db1f7a17c1c5b2a01d8f8ccba0ac Mon Sep 17 00:00:00 2001 From: Jaben Carsey Date: Fri, 13 Dec 2013 18:45:43 +0000 Subject: [PATCH] ShellPkg: Refactor change to current file system This moves the initialization for handling file system changes into a separate function. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jaben Carsey Reviewed-by: Erik Bjorge git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14983 6f19259b-4bc3-4df7-8a09-765794883524 --- ShellPkg/Application/Shell/Shell.c | 46 ++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/ShellPkg/Application/Shell/Shell.c b/ShellPkg/Application/Shell/Shell.c index b3dc8766ee..0cf09ec76b 100644 --- a/ShellPkg/Application/Shell/Shell.c +++ b/ShellPkg/Application/Shell/Shell.c @@ -1618,6 +1618,43 @@ ProcessNewSplitCommandLine( } return (Status); } + +/** + Handle a request to change the current file system + + @param[in] CmdLine The passed in command line + + @retval EFI_SUCCESS The operation was successful +**/ +EFI_STATUS +EFIAPI +ChangeMappedDrive( + IN CONST CHAR16 *CmdLine + ) +{ + EFI_STATUS Status; + Status = EFI_SUCCESS; + + // + // make sure we are the right operation + // + ASSERT(CmdLine[(StrLen(CmdLine)-1)] == L':' && StrStr(CmdLine, L" ") == NULL); + + // + // Call the protocol API to do the work + // + Status = ShellInfoObject.NewEfiShellProtocol->SetCurDir(NULL, CmdLine); + + // + // Report any errors + // + if (EFI_ERROR(Status)) { + ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SHELL_INVALID_MAPPING), ShellInfoObject.HiiHandle, CmdLine); + } + + return (Status); +} + /** Function will process and run a command line. @@ -1702,19 +1739,16 @@ RunCommand( if (ContainsSplit(CleanOriginal)) { Status = ProcessNewSplitCommandLine(CleanOriginal); } else { - // // If this is a mapped drive change handle that... // if (CleanOriginal[(StrLen(CleanOriginal)-1)] == L':' && StrStr(CleanOriginal, L" ") == NULL) { - Status = ShellInfoObject.NewEfiShellProtocol->SetCurDir(NULL, CleanOriginal); - if (EFI_ERROR(Status)) { - ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SHELL_INVALID_MAPPING), ShellInfoObject.HiiHandle, CleanOriginal); - } - FreePool(CleanOriginal); + Status = ChangeMappedDrive(CleanOriginal); + SHELL_FREE_NON_NULL(CleanOriginal); return (Status); } + ///@todo update this section to divide into 3 ways - run internal command, run split (above), and run an external file... /// We waste a lot of time doing processing like StdIn,StdOut,Argv,Argc for things that are external files...