Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 5 Jun 2012 18:31:14 +0400
From:      Andrey Chernov <ache@FreeBSD.ORG>
To:        Joerg Sonnenberger <joerg@britannica.bec.de>
Cc:        svn-src-head@FreeBSD.ORG, svn-src-all@FreeBSD.ORG, src-committers@FreeBSD.ORG, Dimitry Andric <dim@FreeBSD.ORG>
Subject:   Re: svn commit: r236582 - head/lib/libc/stdlib
Message-ID:  <20120605143114.GA15710@vniz.net>
In-Reply-To: <20120605142510.GB13416@britannica.bec.de>
References:  <201206042134.q54LYoVJ067685@svn.freebsd.org> <4FCDBE69.6080906@FreeBSD.org> <20120605123901.GA13306@vniz.net> <20120605125520.GA12045@britannica.bec.de> <20120605131305.GF13306@vniz.net> <20120605142510.GB13416@britannica.bec.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Jun 05, 2012 at 04:25:10PM +0200, Joerg Sonnenberger wrote:
> > Please see 
> > http://austingroupbugs.net/view.php?id=385
> 
> That is about explicitly recognizing how stupid the notion of free(3)
> not preserving errno is. Seriously, before you start to randomly bloat
> code all over the place, restricting the behavior of free(3) to be
> sensible is a much saner option.

I agree that saving errno inside free() itself will make life easy, 
but I just follow their recommendation:

"However, earlier versions of this standard did not require this, and the
same example had to be written as:

    // buf was obtained by malloc(buflen)
    ret = write(fd, buf, buflen);
    if (ret < 0) {
        int save = errno;
        free(buf);
        errno = save;
        return ret;
    }
"

All we have now is "earlier version of this standard". Until they'll 
publish the future version, we can't ignore the recommendation.

BTW, if general consensus will be to track unpublished standard, I will 
back out my change (in hope our malloc() maintainer will change free() to 
directly save errno).

-- 
http://ache.vniz.net/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120605143114.GA15710>