Subject: bug#13344: 24.3.50; Gnus error c:/dev/fd/0

From: [email-masked]
Date: Thu, 03 Jan 2013 21:07:26 -0100

Eli Zaretskii <[email-masked]> writes:

>> From: [email-masked]
>> Date: Thu, 03 Jan 2013 00:14:43 +0000
>> 
>> There appears to be an error opening up the .authinfo.gpg file.
>> 
>> I get the error in the *Messages* buffer:
>> 
>> Unable to open server nnimap+aol due to: Opening input file: Opening process input file, no such file or directory, c:/dev/fd/0
>> Opening nnimap server on aol...failed:
>
> Looks like this comes from this snippet in epg.el:epg--start:
>
>     ;; Set GPG_TTY and TERM for pinentry-curses.  Note that we can't
>     ;; use `terminal-name' here to get the real pty name for the child
>     ;; process, though /dev/fd/0" is not portable.
>     (with-temp-buffer
>       (when (= (call-process "tty" "/dev/fd/0" t) 0)
> 	(delete-backward-char 1)
> 	(setq terminal-name (buffer-string))))
>
> Obviously, this will never work on Windows.
>
> I know nothing about this stuff, so I have no idea why you get there
> now, but didn't get there before.  Maybe this will give you a hint to
> start digging.

Thanks Eli.

Here is the bare-bones way to duplicate this bug.

>From runemacs.exe -Q, evaluated in *scratch* the following:

(require 'epa-file)
(epa-file-enable)
(setq epa-file-cache-passphrase-for-symmetric-encryption t)

The output I get after "(epa-file-enable)" is:
"`epa-file' already enabled"

Now, setting `toggle-debug-on-error' and just using ^X^F `(find-file)'
on the .authinfo.gpg file, I get the following backtrace:

Debugger entered--Lisp error: (file-error "Opening input file" "Opening process input file" "no such file or directory" "c:/dev/fd/0").
  signal(file-error ("Opening input file" "Opening process input file" "no such file or directory" "c:/dev/fd/0")).
  epa-file--find-file-not-found-function().
  run-hook-with-args-until-success(epa-file--find-file-not-found-function).
  byte-code("\303!\203.\304!\204.\305	!\210\306\307\310D\"\210\311\312!\204.\313.\303\207" [filename buf error file-exists-p file-readable-p kill-buffer signal file-error "File is not readable" run-hook-with-args-until-success find-file-not-found-functions t] 4).
  find-file-noselect-1(#<killed buffer> "~/.authinfo.gpg" nil nil "~/.authinfo.gpg" (0 146575129)).
  find-file-noselect("c:/home/.authinfo.gpg" nil nil t).
  find-file("c:/home/.authinfo.gpg" t).
  call-interactively(find-file nil nil).

Maybe if "/dev/fd/0" (or its equivalent) doesn't exists, this part of
epg.el:epg--start should be skipped as the comment acknowledges that
"/dev/fd/0" is not portable?

Thanks.