standards/171577: realpath(3) returns ENOTDIR instead of ENOENT
Eric Blake
eblake at redhat.com
Wed Sep 12 17:20:16 UTC 2012
The following reply was made to PR standards/171577; it has been noted by GNATS.
From: Eric Blake <eblake at redhat.com>
To: bug-followup at FreeBSD.org, emaste at FreeBSD.org,
Andrey Chernov <ache at FreeBSD.org>
Cc:
Subject: Re: standards/171577: realpath(3) returns ENOTDIR instead of ENOENT
Date: Wed, 12 Sep 2012 11:15:53 -0600
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enig27BF737EE4D47602967C34CC
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
>> ENOTDIR is
>>=20
>> 20 ENOTDIR Not a directory. A component of the specified pathnam=
e
>> existed, but it was not a directory, when a directory was=
>> expected.
>>=20
>> >How-To-Repeat:
>>=20
>> feynman% realpath /does-not-exist/foo
>> realpath: /does-not-exist/foo: Not a directory
>=20
> It works as designed. See POSIX realpath ERRORS section
> http://pubs.opengroup.org/onlinepubs/9699919799/functions/realpath.html=
>=20
> [ENOENT]
> A component of file_name does not name an existing file or file_name
> points to an empty string.
> [ENOTDIR]
> A component of the path prefix is not a directory, or the file_name
> argument contains at least one non- <slash> character and ends with one=
or
> more trailing <slash> characters and the last pathname component names =
an
> existing file that is neither a directory nor a symbolic link to a
> directory.
Andrey, you are arguing that since /does-not-exist is missing, it is not
a directory; but the POSIX wording for ENOENT vs. ENOTDIR is quite clear:=
http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#=
tag_15_03
[ENOENT]
No such file or directory. A component of a specified pathname does
not exist, or the pathname is an empty string.
[ENOTDIR]
Not a directory. A component of the specified pathname exists, but
it is not a directory, when a directory was expected.
In this particular case of /does-not-exist/foo, '/does-not-exist' is a
path component that does not exist (ENOENT applies), but is NOT a case
of a component that exists but is not a directory where a directory was
expected (ENOTDIR does not apply). Ed's patch looks correct to me.
--=20
Eric Blake eblake at redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
--------------enig27BF737EE4D47602967C34CC
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
Comment: Public key at http://people.redhat.com/eblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/
iQEcBAEBCAAGBQJQUMNKAAoJEKeha0olJ0Nq7F4H/izH/A28gWyNeaeV9l0+ICrJ
W3LzwsTF6ebf5vckyargt/4Vgf1p0/vGyWfSaQVXHTGJ2k7UD7Kqrd+lwvgATYCh
T6yfevqC/igAfYPGEmIuvW5WlzxMvp/4CAkohi/b668mwEsNANXOaoloxzE57gHJ
bGJJPhpULyEjIXCJacYIbW8AWpKU8InBZwbXQvNyEQ25we86DbsAa5cJ5rsKs6NY
jHCpK8vI4ggkPXyrk0JhN0s4hP48KcC9LiuHQJ3n2lCliQApghozvjBAJqZIt0rp
KksgkPS4ZAZXLoA7vxj37+dsL9VV+A/XdUmUWjmD9d892FerW8HC1ILzaj8HnnU=
=0kNd
-----END PGP SIGNATURE-----
--------------enig27BF737EE4D47602967C34CC--
More information about the freebsd-standards
mailing list