Avoid mapping ENOENT to ENOTDIR for non-existent path components.
The ENOTDIR mapping was introduced in r235266 for kern/128933 based on
an interpretation of the somewhat ambiguous language in the POSIX realpath
specification. The interpretation is inconsistent with Solaris and Linux,
a regression from 9.0, and does not appear to be permitted by the
description of ENOTDIR:
20 ENOTDIR Not a directory. A component of the specified pathname
existed, but it was not a directory, when a directory was
expected.
PR: standards/171577
MFC after: 3 days
This commit is contained in:
@@ -181,8 +181,6 @@ realpath(const char * __restrict path, char * __restrict resolved)
|
|||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
if (lstat(resolved, &sb) != 0) {
|
if (lstat(resolved, &sb) != 0) {
|
||||||
if (errno != ENOENT || p != NULL)
|
|
||||||
errno = ENOTDIR;
|
|
||||||
if (m)
|
if (m)
|
||||||
free(resolved);
|
free(resolved);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|||||||
Reference in New Issue
Block a user