[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute o
From: |
Stefan Monnier |
Subject: |
Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names. |
Date: |
Mon, 03 Feb 2014 09:06:33 -0500 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) |
>> I'm having trouble understanding the above: can you give an example of
>> a file which is neither absolute nor relative to the directory passed
>> to the system API?
> I think it happened to me with shr.el, since it doesn't set the
> current directory of the buffer where it renders an HTML document.
Sounds like a bug in the code that extracts the name from the buffer and
passes it to w32-shell-execute, or in the code that (fails to) set the
buffer's default-directory.
IOW the same would happen under GNU/Linux passing that file to call-process.
Or is there something different going on?
> In any case, this is not worse than what happened before the change
> that introduced the call to expand-file-name: then, the ShellExecute
> API was always called with a file name as passed to w32-shell-execute.
I guess the question for me now is "why call Fexpand_file_name"?
I see it was introduced in:
timestamp: Tue 2013-12-24 19:21:06 +0200
message:
Minor fixes in w32-shell-execute.
src/w32fns.c (Fw32_shell_execute): Ensure DOCUMENT is an absolute
file name when it is submitted to ShellExecute. Simplify code.
Don't test DOCUMENT for being a string, as that is enforced by
CHECK_STRING. Doc fix.
But I don't know which problem it was trying to solve.
>> Maybe instead of Ffile_exists_p a better option is to use a w32 system
>> call along the lines of faccess or stat (after all, this presumed file
>> name will be passed to the OS rather than to Emacs functions, so it
>> shouldn't pay attention to file-name-handlers and things like that,
>> right?).
> That's exactly what the current code does:
> handler = Ffind_file_name_handler (absdoc, Qfile_exists_p);
> if (NILP (handler))
> {
> Lisp_Object absdoc_encoded = ENCODE_FILE (absdoc);
> if (faccessat (AT_FDCWD, SSDATA (absdoc_encoded), F_OK, AT_EACCESS) ==
> 0)
> document = absdoc_encoded;
> else
> document = ENCODE_FILE (document);
> }
> else
> document = ENCODE_FILE (document);
Not "exactly"; my suggestion was to use only:
Lisp_Object absdoc_encoded = ENCODE_FILE (absdoc);
if (faccessat (AT_FDCWD, SSDATA (absdoc_encoded), F_OK, AT_EACCESS) == 0)
document = absdoc_encoded;
else
document = ENCODE_FILE (document);
Another potential tweak: we could check file-name-absolute-p before
going through the trouble of trying to figure out whether to pass the
file name to expand-file-name and/or file-exists-p (that would
also have solved the url-handler-mode issue of the OP).
>> And to deal with "not yet created files" we shouldn't check the file
>> itself but its directory.
> Its directory is just the default-directory of the current buffer,
No, the directory of "toto/titi/bar" is not default-directory.
Stefan
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Stefan Monnier, 2014/02/01
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Eli Zaretskii, 2014/02/01
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Stefan Monnier, 2014/02/01
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Eli Zaretskii, 2014/02/01
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Stefan Monnier, 2014/02/02
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Eli Zaretskii, 2014/02/02
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Stefan Monnier, 2014/02/02
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., David Kastrup, 2014/02/02
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Eli Zaretskii, 2014/02/03
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Eli Zaretskii, 2014/02/03
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names.,
Stefan Monnier <=
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Eli Zaretskii, 2014/02/03
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Stefan Monnier, 2014/02/03
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Eli Zaretskii, 2014/02/04
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Stefan Monnier, 2014/02/04
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Eli Zaretskii, 2014/02/04
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Stefan Monnier, 2014/02/04
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Eli Zaretskii, 2014/02/04
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Stefan Monnier, 2014/02/05
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Eli Zaretskii, 2014/02/05
- Re: [Emacs-diffs] trunk r116230: Fix bug #16558 with w32-shell-execute on remote file names., Stefan Monnier, 2014/02/05