Subject: Re: bug#36502: Fwd: bug#36502: 27.0.50; infinite loop in file-name-case-insensitive-p

From: Eli Zaretskii <[email-masked]>
Date: Mon, 08 Jul 2019 16:59:55 +0300

> From: Ken Brown <[email-masked]>
> CC: "[email-masked]" <[email-masked]>, "[email-masked]"
> 	<[email-masked]>, "[email-masked]" <[email-masked]>
> Date: Mon, 8 Jul 2019 13:36:38 +0000
> 
> >>      if (NILP (default_directory))
> >> -    default_directory = BVAR (current_buffer, directory);
> >> +    {
> >> +      default_directory = BVAR (current_buffer, directory);
> >> +      if (NILP (Ffile_name_absolute_p (default_directory)))
> >> +       default_directory = Qnil;
> >> +    }
> > 
> > Hmm... why nullify it?  Why not simply call expand-file-name
> > recursively?
> 
> If the current buffer's default-directory is not absolute, then that variable is 
> invalid and we can't use it.

I'm asking why not do this instead:

  if (NILP (default_directory))
    {
      default_directory = BVAR (current_buffer, directory);
      if (NILP (Ffile_name_absolute_p (default_directory)))
        default_directory = Fexpand_file_name (default_directory,
	                                       Vinvocation_directory);
    }

Or will the above not work for some reason?

> Nullifying it guarantees that the code starting with "if (! STRINGP 
> (default_directory))" is used.  Maybe I should have put in a comment explaining 
> that.

Sure, but this loses information.  Of course, if we cannot do better
reliably, it's an okay solution.

Thanks.