bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#33016: 26.1; (make-process ...) doesn't signal an error, when execut


From: Klaus-Dieter Bauer
Subject: bug#33016: 26.1; (make-process ...) doesn't signal an error, when executable given as absolute Windows path does not exist
Date: Fri, 19 Oct 2018 10:03:00 +0200

On Thu, Oct 11, 2018 at 4:22 PM Eli Zaretskii <eliz@gnu.org> wrote:
> From: Klaus-Dieter Bauer <bauer.klaus.dieter@gmail.com>
> Date: Thu, 11 Oct 2018 14:55:27 +0200
>
> Entering
>
>     M-x eval-_expression_ RET
>       (make-process :name "test" :command '("No Such Command"))
>
> will bring up the debugger with
>
>     (file-missing "Searching for program" "No such file or directory" "nosuchcommand")
>
> However, entering
>
>     M-x eval-_expression_ RET
>       (make-process :name "test" :command '("c:/No Such Command"))
>
> will merely display in the echo-area message:
>
>     eval: Spawning child process: Invalid argument
>
> I stumbled upon this when debugging a quick-and-dirty
> script, that called a program by absolute path. When a new
> version of the program changed the name of the executable
> (tex2lyx2.3 -> tex2lyx), this issue occurred, and hindered
> debugging the problem.
>
> The wording of the message might indicate a
> Windows-specific issue.

The error in the second case is Windows specific, but the
inconsistency isn't: on Unix the second case "succeeds", in that it
returns a process object without any error messages.

The error message you see in the first case is because Emacs searches
for the program along exec-path (because it is not an absolute file
name).  In the second case this search is not done, because the file
name is already absolute.

So I don't think this is a bug.

Now I understand the intent of the implementation better. However, the Unix/Windows difference still seems like a bug to me.

On Unix, the elisp will succeed, but the output and exit-status of the process clarify the issue.
On Windows, a non-local exit occurs due to the resulting exception.
As example:

    (let (p)
      (setq p
        (make-process :name "test" :command '("/tmp/nosuchcommand") :buffer (current-buffer)))
      ;; -- Subsequent code never reached on Windows
      (while (process-live-p p)
        (sleep-for 0.01))
      (message "(Process exit status %d)"
        (process-exit-status p)))

So on Windows two issues occur:
  - The exception doesn't indicate what went wrong.
  - The control-flow of the Elisp program is different from Unix.

This different seems, like it may give rise to Windows-specific bugs, that would be unnecessarily hard to debug.

Then again, calling programs by full path is probably rare, so it's probably a pretty low-priority issue.

- Klaus

 

reply via email to

[Prev in Thread] Current Thread [Next in Thread]