On Sep 23 2017, Eli Zaretskii <eliz@gnu.org> wrote:
>> +/* Return the current working directory. The result should be freed
>> + with 'free'. Return NULL on errors. */
>> +char *
>> +emacs_get_current_dir_name (void)
>> +{
>> + char *dir = emacs_get_current_dir_name_1 ();
>> + if (dir == NULL)
>> + return NULL;
>> + /* On Linux, getcwd and get_current_dir_name return a string
>> + starting with "(unreachable)" if the current directory doesn't
>> + exist, e.g. because it was unmounted. Treat that as an error.
>> + See https://debbugs.gnu.org/cgi/bugreport.cgi?bug=27871. */
>> + const char *prefix = "(unreachable)";
>> + size_t dir_len = strlen (dir);
>> + size_t prefix_len = strlen (prefix);
>> + if (dir_len >= prefix_len && strncmp (dir, prefix, prefix_len) == 0)
>> + {
>> + errno = ENOTCONN;
>> + return NULL;
>
> What if there's a directory called literally "(unreachable)SOMETHING"?
An absolute file name cannot start with "(unreachable)".
Yes, and getcwd and friends only return absolute filenames, and we only use $PWD if it's absolute, so anything except '/' or a drive letter can't be a prefix in the success case. I'll add a comment to that effect.