https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8ce4b73920f76de6a48bd04d3b0fe6e21207da7b

commit 8ce4b73920f76de6a48bd04d3b0fe6e21207da7b
Author:     Hermès Bélusca-Maïto <[email protected]>
AuthorDate: Thu Jul 13 16:07:37 2023 +0200
Commit:     Hermès Bélusca-Maïto <[email protected]>
CommitDate: Fri Jul 14 14:36:55 2023 +0200

    [CMD] Correctly honour the "short" path flag in %~var enhanced variables 
expansion. (#5433)
    CORE-14096, CORE-8002
    
    Patch based on an earlier fix attempt by Doug Lyons.
    It should fix the problem observed by contributor 'whindsaks' in PR #5403.
    
    This bug has always been present since the implementation of this feature
    in commit a1eb1f6ba (r40024).
    
    The expansion of %~dpX ennhanced variables used to incorrectly show some
    directories in uppercase. For example:
    
    ```batch
    :: testcmd.cmd
    echo '%~dp0'
    echo '%~dps0'
    echo '%~s0'
    ```
    
    would show:
    
    ```
    P:\Documents and Settings\Administrator\Desktop>echo 'P:\Documents and 
Settings\Administrator\DESKTOP\'
    'P:\Documents and Settings\Administrator\DESKTOP\'
    
    P:\Documents and Settings\Administrator\Desktop>echo 
'P:\DOCUME~1\ADMINI~1\DESKTOP\'
    'P:\DOCUME~1\ADMINI~1\DESKTOP\'
    
    P:\Documents and Settings\Administrator\Desktop>echo 
'P:\DOCUME~1\ADMINI~1\DESKTOP\testcmd.cmd'
    'P:\DOCUME~1\ADMINI~1\DESKTOP\testcmd.cmd'
    ```
    
    instead of the correct:
    
    ```
    P:\Documents and Settings\Administrator\Desktop>echo 'P:\Documents and 
Settings\Administrator\Desktop\'
    'P:\Documents and Settings\Administrator\Desktop\'
    
    P:\Documents and Settings\Administrator\Desktop>echo 
'P:\DOCUME~1\ADMINI~1\DESKTOP\'
    'P:\DOCUME~1\ADMINI~1\DESKTOP\'
    
    P:\Documents and Settings\Administrator\Desktop>echo 
'P:\DOCUME~1\ADMINI~1\DESKTOP\testcmd.cmd'
    'P:\DOCUME~1\ADMINI~1\DESKTOP\testcmd.cmd'
    ```
    
    The reason was a wrong handling of the presence (or absence) of the
    "short" path format specifier 's' in those enhanced variables.
    In the examples above, the "Desktop" sub-directory has a short-path
    name available (because it is in a FAT partition). The short-path name
    was used some times also even with the 's' specifier absent.
    
    Co-authored-by: Doug Lyons <[email protected]>
---
 base/shell/cmd/cmd.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/base/shell/cmd/cmd.c b/base/shell/cmd/cmd.c
index 0f16229172f..126f2f4cb31 100644
--- a/base/shell/cmd/cmd.c
+++ b/base/shell/cmd/cmd.c
@@ -1158,11 +1158,9 @@ GetEnhancedVar(
         if (hFind != INVALID_HANDLE_VALUE)
         {
             PTSTR FixedComponent = w32fd.cFileName;
-            if (*w32fd.cAlternateFileName &&
-                ((Modifiers & M_SHORT) || !_tcsicmp(In, 
w32fd.cAlternateFileName)))
-            {
+            if ((Modifiers & M_SHORT) && *w32fd.cAlternateFileName)
                 FixedComponent = w32fd.cAlternateFileName;
-            }
+
             FindClose(hFind);
 
             if (Out + _tcslen(FixedComponent) + 1 >= 
&FixedPath[ARRAYSIZE(FixedPath)])

Reply via email to