Subject: Re: bug#71446: 30.0.50; em-extpipe-test-14 fails on MS-Windows

From: Jim Porter <[email-masked]>
Date: Sun, 9 Jun 2024 14:03:18 -0700

On 6/8/2024 10:22 PM, Eli Zaretskii wrote:
> The failure is as follows:
[snip]
>    Test em-extpipe-test-14 condition:
>        Command logs: command: "tac *<c:/Users/EliZ/AppData/Local/Temp/emacs-test-hYLZuB-em-extpipe"
> 
> 		    ----------------------------------------
> 		    [process] started external process `cmdproxy.exe'
> 
> 		    d\:/gnu/git/emacs/trunk/nt/cmdproxy.exe -c tac\ \<c\:/Users/EliZ/AppData/Local/Temp/emacs-test-hYLZuB-em-extpipe
> 		    ----------------------------------------
> 		    [process] received output from process `cmdproxy.exe'
> 
> 		    tac: standard input: read error
> 
> 		    ----------------------------------------
> 		    [process] sentinel for external process `cmdproxy.exe': "exited abnormally with code 1
> 		    "
> 		    ----------------------------------------
> 		    [process] finished external process `cmdproxy.exe'
[snip]
> 
> AFAIU, the problem is that this invokes 'tac' with redirection, but
> the redirected file name uses Unix-style forward slashes, which
> doesn't work on Windows: the file name after "<" must use backslashes.

Are you sure? I tested on an MS-Windows system (no dev env there, but I 
can run pre-built programs), and forward slashes seem ok. I ran the 
following without issue inside cmd.exe:

   tac <C:/Users/Jim/Documents/file.txt

   cmdproxy.exe -c "tac <C:/Users/Jim/Documents/file.txt"

> I also don't understand all those backslashes in
> 
>    d\:/gnu/git/emacs/trunk/nt/cmdproxy.exe -c tac\ \<c\:/Users/EliZ/AppData/Local/Temp/emacs-test-hYLZuB-em-extpipe
> 
> Are they real or just some artifact of printing the command?  If they
> are real, and included in the command line, then perhaps my analysis
> is incorrect and there are more fundamental problems here.

Those should just be an artifact of printing the command. I've changed 
that logging to use the current system's quoting style, so you should 
hopefully see something like the following in the logs now:

   "d:/gnu/[...]/cmdproxy.exe" "-c" "tac 
<c:/[...]/emacs-test-hYLZuB-em-extpipe"

As for why it's failing, I'm not totally sure. From the logs, I think 
the child process for the command is being invoked correctly, but I'm 
not an expert on the extpipe code; I've CCed the author (Sean Whitton), 
who might know more.