All of lore.kernel.org
 help / color / mirror / Atom feed
From: ebiederm@xmission.com (Eric W. Biederman)
To: Linus Torvalds <torvalds@osdl.org>
Cc: Herbert Xu <herbert@gondor.apana.org.au>,
	Chris Wright <chrisw@osdl.org>,
	akpm@osdl.org, linux-kernel@vger.kernel.org, sds@epoch.ncsc.mil,
	jmorris@redhat.com, mika@osdl.org
Subject: Re: [PATCH] Use NULL instead of integer 0 in security/selinux/
Date: 10 Jul 2004 03:39:13 -0600	[thread overview]
Message-ID: <m1smc09p6m.fsf@ebiederm.dsl.xmission.com> (raw)
In-Reply-To: <Pine.LNX.4.58.0407092313410.1764@ppc970.osdl.org>

Linus Torvalds <torvalds@osdl.org> writes:

> On Fri, 9 Jul 2004, Eric W. Biederman wrote:
> >
> > Does this mean constructs like:
> > ``if (pointer)'' and ``if (!pointer)'' are also outlawed.
> 
> Of course not.
> 
> Why should they be?

Only because the definition of the semantics of ``if'' is in terms of
comparisons with ``0'',  and I am familiar enough with the C
programming language that, that is how I read it.  It is still 
the case that because the comparison happens in pointer context the
``0'' referred  to is the null pointer constant.  

For some of us who are extremely familiar with C your argument is
confusing.  You make statements that sound like they are about the
definition of the C programming language when in fact they are
criticism of a given C programming style.  

Since I am already making distinctions 0 as the integer value and
0 as the pointer constant when 0 is implicitly introduced.  It is
really not confusing to me in the case of manifest constants.

> What's considered bad form is:
>  - assignments in boolean context (because of the confusion of "=" and 
>    "==")
>  - thinking the constant "0" is a pointer.

I would agree that using the constant "0" in a pointer context
when a more explicit NULL is bad form.  But "0" is the one
legal way in C to write the NULL pointer constant.

> There's no reason why "if (!ptr)" would be wrong. That has zero confusion 
> about 0 vs NULL.

For me it has exactly the same level of confusion as the cases that
are being fixed has.  I have to know the type to know if it is testing
against the NULL pointer constant or if it is testing against the
integer value zero.
 
> The confusion about "0" is that in traditional C it means two things: it 
> can either be an integer (the common case) or it can sometimes be a 
> pointer. That kind of semantic confusion is bad.

Either that or it can be called greater expressive power though fewer
concepts. 

I like the fact this allows cases like ``if (!ptr)'' and friends.
 
> But it has nothing to do with the _value_ zero, or testing pointers for
> being non-NULL. The value zero is not about semantic confusion, it's just 
> a bit pattern. And testing pointers is not ambiguous: when you test a 
> pointer, it's _un_ambigiously checking that pointer for NULL.

see above.

> Problems arise when there is room for confusion, and that's when the 
> compiler should (and does) warn. If something is unambiguous, it's not 
> bad.

The compiler is compiling the correct code so the code is clearly not
ambiguous.  But since types are not always obvious to a person
staring at the code using the more explicit form of the constant
i.e. NULL or '\0' instead of 0 adds useful redundancy.

Hopefully that explains why I objected to the way you can out against
using ``0'' as the null pointer constant.

Eric

  parent reply	other threads:[~2004-07-10  9:42 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-07-07 19:25 [PATCH] Use NULL instead of integer 0 in security/selinux/ Chris Wright
2004-07-08  3:12 ` Herbert Xu
2004-07-08  3:27   ` David S. Miller
2004-07-08  3:43     ` Miles Bader
2004-07-08  5:22       ` Linus Torvalds
2004-07-08  5:35         ` Miles Bader
2004-07-08 15:58           ` Linus Torvalds
2004-07-08 16:23             ` Dave Jones
2004-07-08 17:57               ` Geert Uytterhoeven
2004-07-09 11:23             ` Roman Zippel
2004-07-10 19:41               ` Geert Uytterhoeven
2004-07-11 10:29                 ` Geert Uytterhoeven
2004-07-11 10:54                   ` viro
2004-07-11 16:14                   ` Linus Torvalds
2004-07-11 20:05                 ` H. Peter Anvin
2004-07-12 15:58                   ` Florian Weimer
2004-07-12 16:34                     ` H. Peter Anvin
2004-07-08 11:18         ` Herbert Xu
2004-07-08 13:10           ` Andreas Schwab
2004-07-08 13:56             ` Herbert Xu
2004-07-08 14:13               ` Andreas Schwab
2004-07-08  5:19   ` Linus Torvalds
2004-07-08 16:09     ` Timothy Miller
2004-07-08 16:21       ` Linus Torvalds
2004-07-08 16:27         ` Linus Torvalds
2004-07-08 16:52         ` Timothy Miller
     [not found]           ` <200407090056.51084.vda@port.imtp.ilyichevsk.odessa.ua>
2004-07-12 15:17             ` Timothy Miller
2004-07-12 16:12               ` Andreas Schwab
2004-07-12 16:51                 ` Andrew Pimlott
2004-07-15 16:15                 ` Timothy Miller
2004-07-09 20:36     ` Eric W. Biederman
2004-07-09 23:49       ` Paul Jackson
2004-07-10  1:43         ` Kyle Moffett
2004-07-10  1:47           ` Herbert Xu
2004-07-10 21:53             ` Alexandre Oliva
2004-07-10  6:18       ` Linus Torvalds
2004-07-10  6:23         ` Linus Torvalds
2004-07-10  6:58           ` Andrea Arcangeli
2004-07-10  9:48             ` Eric W. Biederman
2004-07-10 15:39           ` Roland Dreier
2004-07-11  2:45             ` Eyal Lebedinsky
2004-07-11 21:19             ` Olaf Titz
2004-07-10  9:39         ` Eric W. Biederman [this message]
2004-07-10  9:56           ` Herbert Xu
2004-07-11 21:47           ` Olaf Titz
2004-07-13  8:43             ` Geert Uytterhoeven
2004-07-14  3:12               ` Alexandre Oliva
2004-07-13 18:53             ` Elladan
2004-07-14  3:15             ` Alexandre Oliva
2004-07-10 12:11         ` Roman Zippel
2004-07-10 21:59         ` Alexandre Oliva
2004-07-11  4:40           ` Linus Torvalds
2004-07-10  9:31       ` Eyal Lebedinsky
2004-07-10 22:07         ` Alexandre Oliva
2004-07-10 23:52         ` Paul Jackson
2004-07-11  0:12           ` Tim Wright
2004-07-12 22:03       ` Bill Davidsen
2004-07-10  8:18     ` Florian Weimer
2004-07-08 11:10   ` Richard B. Johnson
2004-07-08 11:28     ` Michael Buesch
2004-07-08 11:44       ` Martin Zwickel
2004-07-08 12:06         ` Michael Buesch
2004-07-08 12:38           ` [OT] NULL versus 0 (Re: [PATCH] Use NULL instead of integer 0 in security/selinux/) Kari Hurtta
2004-07-08 12:42             ` Michael Buesch
2004-07-08 12:57               ` Kari Hurtta
2004-07-08 15:25                 ` Herbert Xu
2004-07-10  8:22           ` [PATCH] Use NULL instead of integer 0 in security/selinux/ Florian Weimer
2004-07-08 11:43     ` P. Benie
2004-07-08 14:32       ` Richard B. Johnson
2004-07-08 15:00         ` Michael Poole
2004-07-08 15:30           ` P. Benie
2004-07-08 15:55           ` Andreas Schwab
2004-07-10  7:09         ` Andrea Arcangeli
2004-07-10  7:02       ` Andrea Arcangeli
2004-07-10  6:59     ` Andrea Arcangeli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m1smc09p6m.fsf@ebiederm.dsl.xmission.com \
    --to=ebiederm@xmission.com \
    --cc=akpm@osdl.org \
    --cc=chrisw@osdl.org \
    --cc=herbert@gondor.apana.org.au \
    --cc=jmorris@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mika@osdl.org \
    --cc=sds@epoch.ncsc.mil \
    --cc=torvalds@osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.