Subject: Re: bug#18232: 24.3.92; Filename completion changes the current working directory

From: Jan Djärv <[email-masked]>
Date: Sun, 10 Aug 2014 15:02:38 +0200

Hello.

10 aug 2014 kl. 10:03 skrev Harald Hanche-Olsen <[email-masked]>:

> [Glenn Morris <[email-masked]> (2014-08-10 02:45:48 UTC)]
> 
>> I can't reproduce that on GNU/Linux.
> 
> So it's OS X specific, then.
> 
> I suspected it might be; thanks for checking it out.

It is a bug introduced by bringing in GNULib.  The GNULib in Emacs makes wrong assumptions, from lib/save-cwd.h:

/* Gnulib needs to save and restore the current working directory to
   fully emulate functions like fstatat.  But Emacs doesn't care what
   the current working directory is; it always uses absolute file
   names.  This module replaces the Gnulib module by omitting the code
   that Emacs does not need.  */

Given that fchdir is called many times per file when completing, no wonder the current working directory gets screwed up.

This bug needs to be fixed in the GNULib code, by really use restore_cwd as it was intended and not make false assumptions and take shortcuts like this:

SAVE_CWD_INLINE int restore_cwd (struct saved_cwd const *cwd) { return 0; }

	Jan D.

>> In general, if you visit files and then unmount the hosting
>> filesystems, you are going to have problems.
> 
> Only if you unmount before saving your changes.
> Why would you do that?
> 
> (I do this several times a week, typically to edit a file on some web
> server. I mount the filesystems using sshfs. It is not practical to
> leave them mounted, as this is a laptop and moves about a lot.)
> 
> – Harald
> 
>