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 <tapandshah@hpe.com>
Reviewed-by: Jaben Carsey <Jaben.carsey@intel.com>
/** @file\r
Main file for attrib shell level 2 function.\r
\r
/** @file\r
Main file for attrib shell level 2 function.\r
\r
+ (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
(C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
(C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
StrCpyS (Cwd, StrSize (Directory) / sizeof (CHAR16) + 1, Directory);\r
StrCatS (Cwd, StrSize (Directory) / sizeof (CHAR16) + 1, L"\\");\r
Drive = GetFullyQualifiedPath (Cwd);\r
StrCpyS (Cwd, StrSize (Directory) / sizeof (CHAR16) + 1, Directory);\r
StrCatS (Cwd, StrSize (Directory) / sizeof (CHAR16) + 1, L"\\");\r
Drive = GetFullyQualifiedPath (Cwd);\r
- while (PathRemoveLastItem (Drive));\r
+ while (PathRemoveLastItem (Drive)) {\r
+ //\r
+ // Check if Drive contains 'fsx:\' only or still points to a sub-directory.\r
+ // Don't remove trailing '\' from Drive if it points to the root directory.\r
+ //\r
+ Path = StrStr (Drive, L":\\");\r
+ if ((Path != NULL) && (*(Path + 2) == CHAR_NULL)) {\r
+ break;\r
+ }\r
+ }\r
FreePool (Cwd);\r
}\r
}\r
FreePool (Cwd);\r
}\r
}\r