Subject: bug#25419: give better message when trying to go to forbidden areas

From: Eli Zaretskii <[email-masked]>
Date: Wed, 11 Jan 2017 19:58:02 +0200

> From: 積丹尼 Dan Jacobson
> 	<[email-masked]>
> Date: Wed, 11 Jan 2017 22:44:08 +0800
> 
> Do C-x C-f ~root
> You will see:
> Setting current directory: Success, /root/

That's because /root has a file-name handler,
tramp-completion-file-name-handler, and although that handler turns
around and calls file-accessible-directory-p, the value of errno is
lost in transition:

  /* If the file name has special constructs in it,
     call the corresponding file handler.  */
  handler = Ffind_file_name_handler (absname, Qfile_accessible_directory_p);
  if (!NILP (handler))
    {
      Lisp_Object r = call2 (handler, Qfile_accessible_directory_p, absname);
      errno = 0;
      return r;
    }

Is there any better way than arbitrarily set errno to EACCES if the
handler returns something other than t?