svn commit: r225097 - in projects/ino64: include lib/libc/gen
usr.sbin/cpucontrol usr.sbin/lpr/common_source usr.sbin/newsyslog
Jilles Tjoelker
jilles at stack.nl
Thu Sep 1 20:37:34 UTC 2011
On Thu, Sep 01, 2011 at 07:32:06PM +0400, Sergey Kandaurov wrote:
> On 25 August 2011 01:14, Jilles Tjoelker <jilles at stack.nl> wrote:
> > On Mon, Aug 22, 2011 at 11:54:12PM +0000, Matthew D Fleming wrote:
> >> Author: mdf
> >> Date: Mon Aug 22 23:54:12 2011
> >> New Revision: 225097
> >> URL: http://svn.freebsd.org/changeset/base/225097
> >> Log:
> >> Avoid using dirfd name there is dirfd() macro already.
> >> Use dirfd() instead of dirp->dd_fd.
> >> Replace dirfd() macro with exported libc symbol.
> >> Use _dirfd() macro internally.
> >> GSoC r222835, r222836, r222837.
> >> Code by Gleb Kurtsou.
> >> Added: projects/ino64/lib/libc/gen/dirfd.c
> >> ==============================================================================
> >> --- /dev/null 00:00:00 1970 (empty, because file is newly added)
> >> +++ projects/ino64/lib/libc/gen/dirfd.c Mon Aug 22 23:54:12 2011 (r225097)
> > [snip]
> >> +int
> >> +dirfd(DIR *dirp)
> >> +{
> >> + if (dirp == NULL)
> >> + return (-1);
> >> +
> >> + return (_dirfd(dirp));
> >> +}
> > Why have this check here? I think the original behaviour (a segfault) is
> > more useful here since the return value of this interface is often not
> > checked.
> Why not to convert it to EINVAL?
> As per IEEE Std 1003.1-2008:
> The dirfd() function may fail if:
> [EINVAL]
> The dirp argument does not refer to a valid directory stream.
Given that this error is optional and that there is no other mention of
this condition, I think the undefined behaviour for a function argument
outside the permitted domain still applies.
Also, glibc and OpenSolaris dirfd() likewise segfault if passed a null
pointer.
A Google code search suggested that the interface is often used without
checking (for example, passing the result directly to fchdir() or a *at
function) and in that case returning -1 for a NULL pointer makes the
problem harder to diagnose (fortunately, AT_FDCWD is not -1 so a *at
function will at least fail with EBADF, like fchdir()).
--
Jilles Tjoelker
More information about the svn-src-projects
mailing list