Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Mar 2017 22:53:47 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        "Ngie Cooper (yaneurabeya)" <yaneurabeya@gmail.com>
Cc:        Ngie Cooper <ngie@freebsd.org>, src-committers <src-committers@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>,  "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>
Subject:   Re: svn commit: r315360 - head/lib/libkvm
Message-ID:  <CANCZdfrV1XezigONuLb1gYOCPzJL_UiT=mb1gDRH%2BdcMofEwPA@mail.gmail.com>
In-Reply-To: <58A53702-FFF6-45E7-ACCD-9B776530064E@gmail.com>
References:  <201703160231.v2G2VgxK082641@repo.freebsd.org> <CANCZdfqgU8DJTdp4HkVxTU0PNpSGn45wJ0S1su=y2Td_uiVncA@mail.gmail.com> <58A53702-FFF6-45E7-ACCD-9B776530064E@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Mar 15, 2017 at 10:44 PM, Ngie Cooper (yaneurabeya)
<yaneurabeya@gmail.com> wrote:
>
>> On Mar 15, 2017, at 21:32, Warner Losh <imp@bsdimp.com> wrote:
>>
>> On Wed, Mar 15, 2017 at 8:31 PM, Ngie Cooper <ngie@freebsd.org> wrote:
>>> Author: ngie
>>> Date: Thu Mar 16 02:31:42 2017
>>> New Revision: 315360
>>> URL: https://svnweb.freebsd.org/changeset/base/315360
>>>
>>> Log:
>>>  Return NULL instead of 0 on failure in _kvm_open, kvm_open{,2,files}
>>>
>>>  This is being done for the following reasons:
>>>  - kvm_open(3), etc says they will return NULL.
>>>  - NULL by definition is (void*)0 per POSIX, but can be redefined,
>>>    depending on the compiler, etc.
>>
>> No, it can't. The C language requires all integral expressions that
>> evaluate to zero to convert to the NULL pointer. This is independent
>> of the internal representation of the NULL pointer.
>>
>> So this change is an NOP for all compilers. It's a good STYLE change.
>
> Someone made an argument a few weeks ago about NULL being definable as a non-zero value on some esoteric architectures or OSes.

No. That's confused. NULL must always be 0. A conversion between 0 and
a pointer always must give a null-pointer. Always. You can't defined
NULL to -1 ever. Even if that happens to be the binary representation
of a NULL pointer, it must be 0.

> I agree though, this is largely stylistic/pedantic for a good cause. If someone set NULL to something non-zero in value, they would be looking for pain :).

You can never set NULL to non-zero integral value (possibly with a
cast). You can have the internal representation have non-zero bits,
but the compiler must hide that.

This does mean that M_ZERO and calloc() won't set pointers to null
pointers on such architectures, but this 0 that you replaced is
completely safe.

I can provide references to the appropriate standards. I made the same
point when someone made that (incorrect) argument.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfrV1XezigONuLb1gYOCPzJL_UiT=mb1gDRH%2BdcMofEwPA>