All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lubos Lunak <l.lunak@suse.cz>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Seebach <peter.seebach@windriver.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	linux-kernel@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>
Subject: Re: [PATCH][RESEND] do not redefine userspace's NULL #define
Date: Sat, 14 Apr 2012 01:18:51 +0200	[thread overview]
Message-ID: <201204140118.51534.l.lunak@suse.cz> (raw)
In-Reply-To: <CA+55aFz0c43QARhefvhdiB=H6buO7VpEOnNbuJTYEcUn8M+mKw@mail.gmail.com>

On Saturday 14 of April 2012, Linus Torvalds wrote:
> On Fri, Apr 13, 2012 at 3:01 PM, Peter Seebach
> > Maybe the thing to do would be to ensure that NULL goes to __null,
> > then define that to be ((void *) 0) if the compiler doesn't provide
> > it?  The magic behavior of __null seems like it'd be preferable
> > where it is available.
>
> So if gcc guarantees that __null has the correct semantics, I could
> imagine replacing the kernel ((void *)0) with __null.

 __null apparently exists only with g++, C does not have the stronger type 
safety that prevents ((void*)0) from being usable in C++, so __null is not 
needed there. So this is really only about userspace C++ code.

 So how about this one? It does not change anything in the C mode and keeps it 
the way you want, and it fixes the C++ mode.

8<-----
headers: do not redefine userspace's NULL #define when compiling C++ code

GCC's NULL is actually __null when compiling C++, which allows detecting some
questionable NULL usage and warn about it, so do not redefine NULL to 0.
Use the 0 definition only if NULL does not exists, to keep kernel headers
self-contained (and GCC's stddef.h will possibly redefine it later to __null).
In C mode ((void*)0) works fine.

Signed-off-by: Luboš Luňák <l.lunak@suse.cz>
---
 include/linux/stddef.h |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/include/linux/stddef.h b/include/linux/stddef.h
index 6a40c76..13dfc92 100644
--- a/include/linux/stddef.h
+++ b/include/linux/stddef.h
@@ -3,10 +3,12 @@
 
 #include <linux/compiler.h>
 
-#undef NULL
 #if defined(__cplusplus)
+#ifndef NULL
 #define NULL 0
+#endif
 #else
+#undef NULL
 #define NULL ((void *)0)
 #endif
 
-- 
1.7.7


-- 
 Lubos Lunak
 l.lunak@suse.cz

  reply	other threads:[~2012-04-13 23:18 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-13 19:24 [PATCH][RESEND] do not redefine userspace's NULL #define Lubos Lunak
2012-04-13 19:39 ` Linus Torvalds
2012-04-13 21:02   ` Arnd Bergmann
2012-04-16  7:43     ` Martin Schwidefsky
2012-04-13 21:46   ` Lubos Lunak
2012-04-14  8:28     ` Arnd Bergmann
2012-04-13 22:01   ` Peter Seebach
2012-04-13 22:24     ` Linus Torvalds
2012-04-13 23:18       ` Lubos Lunak [this message]
2012-04-14  0:44         ` Linus Torvalds
2012-04-14  6:43           ` Lubos Lunak
2012-04-14  7:51             ` Linus Torvalds
2012-04-14  8:21               ` Lubos Lunak
2012-04-14  8:27                 ` Linus Torvalds
2012-04-14  8:54                   ` Lubos Lunak
2012-04-14  9:30                     ` Arnd Bergmann

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=201204140118.51534.l.lunak@suse.cz \
    --to=l.lunak@suse.cz \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peter.seebach@windriver.com \
    --cc=torvalds@linux-foundation.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.