[PATCH] CMD: Always keep drive letter uppercase.

Zebediah Figura z.figura12 at gmail.com
Sat Aug 8 11:45:05 CDT 2020


Hello Gareth, thanks for the patch! I have some comments inlined.

On 8/8/20 7:39 AM, Gareth Poole wrote:
> Windows and DOS before it has always kept the drive letter in uppercase at the command line, regardless of what input it is given. Since paths are case-insensitive this should not affect path resolution, but it is more consistent with bothe behaviour of Windows, and the behaviour that Wine CMD already displays with directory names.
> 
> Signed-off-by: Gareth Poole <girpoole at gmail.com>
> ---
>  programs/cmd/wcmdmain.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
> index 97cc607a64..5f5f65fe34 100644
> --- a/programs/cmd/wcmdmain.c
> +++ b/programs/cmd/wcmdmain.c
> @@ -392,12 +392,20 @@ static void WCMD_show_prompt (BOOL newLine) {
>  	  break;
>  	case 'N':
>            status = GetCurrentDirectoryW(ARRAY_SIZE(curdir), curdir);
> +	  /* No need to worry about surrogates here, because all possible */
> +	  /* drive letters are in the BMP. */
> +	  if (IsCharAlphaW(curdir[0])) { /* Check if the path begins with a drive letter. */

This call is unnecessary; toupper() leaves other characters untouched.

> +	    curdir[0] = toupper(curdir[0]); /* Ensure that the drive letter is shown in uppercase. */
> +	  }

I think these comments are rather superfluous. The code explains as much.

>  	  if (status) {
>  	    *q++ = curdir[0];
>  	  }
>  	  break;
>  	case 'P':
>            status = GetCurrentDirectoryW(ARRAY_SIZE(curdir), curdir);
> +	  if (IsCharAlphaW(curdir[0])) {
> +	    curdir[0] = toupper(curdir[0]);
> +	  }
>  	  if (status) {
>  	    lstrcatW (q, curdir);
>  	    while (*q) q++;
> @@ -1383,7 +1391,9 @@ void WCMD_execute (const WCHAR *command, const WCHAR *redirects,
>          (!cmd[2] || cmd[2] == ' ' || cmd[2] == '\t')) {
>        WCHAR envvar[5];
>        WCHAR dir[MAX_PATH];
> -
> +      /* Make sure that the working directory is set to the */
> +      /* canonical uppercase version of the drive letter. */

Same here.

> +      cmd[0] = toupper(cmd[0]);
>        /* Ignore potential garbage on the same line */
>        cmd[2]=0x00;
>  
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20200808/07b42b1a/attachment.sig>


More information about the wine-devel mailing list