NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: lib/41567 (posix_memalign(3) taints errno when it shouldn't.)



The following reply was made to PR lib/41567; it has been noted by GNATS.

From: Klaus Klein <kleink%kleink.org@localhost>
To: David Holland <dholland-bugs%netbsd.org@localhost>
Cc: gnats-bugs%NetBSD.org@localhost, lib-bug-people%netbsd.org@localhost,
        netbsd-bugs%netbsd.org@localhost, gnats-admin%netbsd.org@localhost, 
kleink%NetBSD.org@localhost,
        ekamperi%gmail.com@localhost
Subject: Re: lib/41567 (posix_memalign(3) taints errno when it shouldn't.)
Date: Mon, 20 Jul 2009 22:44:19 +0200

 On Sun, Jul 19, 2009 at 06:11:25PM +0000, David Holland wrote:
 > On Sun, Jul 19, 2009 at 07:27:05AM +0000, kleink%NetBSD.org@localhost wrote:
 >  > The standard (ISO/IEC 9899:1999, 7.5#3) is clear on this issue:
 >  > 
 >  >   The value of errno may be set to nonzero by a library
 >  >   function call whether or not there is an error, provided
 >  >   the use of errno is not documented in the description
 >  >   of the function in this International Standard.
 > 
 > What POSIX says (which isn't the same) would be more pertinent...
 
 That I concede, despite the alignment of POSIX with ISO C; I'd chosen
 to quote from the latter as it matches the case for the bug-reported
 posix_memalign(3) best.  Anyway, XSH 2.3 (2nd paragraph) still holds.
 
 >  > Documenting this in posix_memalign(3) alone would be taking
 >  > the wrong road, too; this is a general concept which fits
 >  > errno(2) better, with the issue of errno(2) currently
 >  > addressing the behavior if system calls only.
 > 
 > Documenting that things may trash errno is not quite the same as
 > documenting whether a function explicitly sets a valid errno on an
 > error return if it does so.
 > 
 > In this case though, on the latter point I think silence is probably
 > better as the behavior is nonportable.
 > 
 > On the former point, how about this:
 > 
 > Index: intro.2
 > ===================================================================
 > RCS file: /cvsroot/src/lib/libc/sys/intro.2,v
 > retrieving revision 1.52
 > diff -u -r1.52 intro.2
 > --- intro.2  2 Jun 2009 13:15:41 -0000       1.52
 > +++ intro.2  19 Jul 2009 18:07:51 -0000
 > @@ -64,10 +64,17 @@
 >  Successful calls never set
 >  .Va errno ;
 >  once set, it remains until another error occurs.
 > -It should only be examined after an error.
 > -Note that a number of system calls overload the meanings of these
 > -error numbers, and that the meanings must be interpreted according
 > -to the type and circumstances of the call.
 > +It should only be examined after an error has been reported, because
 > +otherwise a leftover value from some previous error may be found
 > +instead.
 > +.Po
 > +Many library functions that are not system calls also set
 > +.Va errno
 > +on return, in the same fashion.
 > +In these cases a nonzero value may be left in
 > +.Va errno
 > +even upon successful return if some internal action failed.
 > +.Pc
 >  .Pp
 >  The manual page for each system call will list some of the common
 >  errno codes that system call can return, but that should not be
 > @@ -78,6 +85,10 @@
 >  a more specification-like manner would take more resources than
 >  this project has available.
 >  .Pp
 > +Note also that a number of system calls overload the meanings of these
 > +error numbers, and that in these cases the meanings must be
 > +interpreted according to the type and circumstances of the call.
 > +.Pp
 >  The following is a complete list of the errors and their
 >  names as given in
 >  .Aq Pa errno.h .
 
 I like it; please commit!
 


Home | Main Index | Thread Index | Old Index