From: Tapan Shah Date: Fri, 7 Oct 2016 20:59:34 +0000 (-0700) Subject: ShellPkg:?cd \? command fails to go back to the root directory of a file system X-Git-Tag: edk2-stable201903~5618 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=a7ea752e59bbbf69c6d8a72ee6a8b7a0f77cca7c ShellPkg:?cd \? command fails to go back to the root directory of a file system Allows cd command to go back to the root directory when 'cd \' executed in system. This change prevents last PathRemoveLastItem() call which truncates '\' from 'fs0:\' in desired root path which is required to set CWD to the root directory. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Tapan Shah Reviewed-by: Jaben Carsey --- diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/Cd.c b/ShellPkg/Library/UefiShellLevel2CommandsLib/Cd.c index 2e51b4cb4d..0967bc7c52 100644 --- a/ShellPkg/Library/UefiShellLevel2CommandsLib/Cd.c +++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/Cd.c @@ -1,6 +1,7 @@ /** @file Main file for attrib shell level 2 function. + (C) Copyright 2016 Hewlett Packard Enterprise Development LP
(C) Copyright 2015 Hewlett-Packard Development Company, L.P.
Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.
This program and the accompanying materials @@ -164,7 +165,16 @@ ShellCommandRunCd ( StrCpyS (Cwd, StrSize (Directory) / sizeof (CHAR16) + 1, Directory); StrCatS (Cwd, StrSize (Directory) / sizeof (CHAR16) + 1, L"\\"); Drive = GetFullyQualifiedPath (Cwd); - while (PathRemoveLastItem (Drive)); + while (PathRemoveLastItem (Drive)) { + // + // Check if Drive contains 'fsx:\' only or still points to a sub-directory. + // Don't remove trailing '\' from Drive if it points to the root directory. + // + Path = StrStr (Drive, L":\\"); + if ((Path != NULL) && (*(Path + 2) == CHAR_NULL)) { + break; + } + } FreePool (Cwd); } }