mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: Thiago Farina <tfransosi@gmail.com>,
	linux-kernel@vger.kernel.org,
	Alexey Dobriyan <adobriyan@gmail.com>,
	Rusty Russell <rusty@rustcorp.com.au>,
	Ingo Molnar <mingo@elte.hu>,
	"David S. Miller" <davem@davemloft.net>,
	Al Viro <viro@zeniv.linux.org.uk>, "Ted Ts'o" <tytso@mit.edu>,
	Christoph Hellwig <hch@infradead.org>
Subject: Re: [PATCH] linux/string.h: Introduce streq macro.
Date: Wed, 27 Apr 2011 15:01:58 -0400	[thread overview]
Message-ID: <1303930918.18763.95.camel@gandalf.stny.rr.com> (raw)
In-Reply-To: <4DB86163.2070201@zytor.com>

On Wed, 2011-04-27 at 11:33 -0700, H. Peter Anvin wrote:
> On 04/27/2011 10:49 AM, Steven Rostedt wrote:
> > On Tue, 2011-04-26 at 16:45 -0300, Thiago Farina wrote:
> >> This macro is arguably more readable than its variants:
> >> - !strcmp(a, b)
> >> - strcmp(a, b) == 0
> > 
> > Actually, this was proposed way back in 2002 my Rusty and I did not see
> > anyone arguing against it. I wonder why it never was incorporated back
> > then?
> > 
> > http://marc.info/?l=linux-kernel&m=103284339813100&w=2
> > 
> > [ added Cc's of some of those that replied to this thread ]
> > 
> 
> Because !strcmp() is idiomatic C.
> 
> This is the same kind of stupidity as
> 
> #define BEGIN {
> #define END   }

I argue that this is totally different than your example. Your example
demonstrates changing the syntax of C to simulate another language. This
has nothing to do with simulating any other language. The problem with 
!strcmp() is that it goes against the semantics of C, as '!' means not.
And to think '!' is an equal can get a bit confusing.

It is also the reason we already have two semantics in the kernel for
this:

	!strcmp(a, b) and strcmp(a, b) == 0

Personally, I'm fine with just using strcmp(a, b) == 0, as I have
learned to understand it. And when reading code, I've actually been able
to teach myself !strcmp(a, b) is equality (although with a slight hiccup
in my thought process).

But I still get stuck when I see the use of strcmp(a, b) meaning a != b.
This is where my brain stops completely to analyze if this is really
what the author of the code meant.

> 
> It doesn't matter if it is more readable *to you*... learn the language,
> please.

I have learned the language (it's my mother tongue), but I think
strcmp() is an anomaly of it. It was a mistake that libc never included
a streq(). If it had, we would not even be having this discussion.
Another note is that strcmp is not really part of the language itself as
we must write it ourselves.

Heck, we could add:

#ifndef __HAVE_ARCH_STREQ
/**
 * streq - Test if two strings are equal
 * @cs: One string
 * @ct: Another string
 */
#undef streq
int streq(const char *cs, const char *ct)
{
	unsigned char c1, c2;

	while (1) {
		c1 = *cs++;
		c2 = *ct++;
		if (c1 != c2)
			return 0;
		if (!c1)
			break;
	}
	return 1;
}
EXPORT_SYMBOL(streq);
#endif

And this would be just like adding another helper function.

-- Steve



  parent reply	other threads:[~2011-04-27 19:02 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-26 18:49 Thiago Farina
2011-04-26 19:00 ` Steven Rostedt
2011-04-26 19:05 ` Alexey Dobriyan
2011-04-26 19:17   ` Steven Rostedt
2011-04-26 19:20     ` Alexey Dobriyan
2011-04-26 19:21       ` Thiago Farina
2011-04-26 19:37         ` Steven Rostedt
2011-04-26 19:45           ` Joe Perches
2011-04-26 19:47             ` Thiago Farina
2011-04-26 19:58               ` Steven Rostedt
2011-04-26 20:06                 ` Joe Perches
2011-04-27  8:29                 ` Miguel Ojeda
2011-04-27  8:42                   ` Geert Uytterhoeven
2011-04-27  8:49                     ` Miguel Ojeda
2011-04-27  9:04                       ` Pavel Vasilyev
2011-04-26 20:00               ` Steven Rostedt
2011-04-26 19:25       ` Steven Rostedt
2011-04-26 19:45 ` Thiago Farina
2011-04-26 19:54   ` Thiago Farina
2011-04-27 17:49   ` Steven Rostedt
2011-04-27 18:33     ` H. Peter Anvin
2011-04-27 18:51       ` Pekka Enberg
2011-04-27 19:16         ` Steven Rostedt
2011-04-27 19:26           ` Steven Rostedt
2011-04-27 19:38           ` Pekka Enberg
2011-04-27 20:04             ` Steven Rostedt
2011-04-27 20:24               ` H. Peter Anvin
2011-04-27 19:01       ` Steven Rostedt [this message]
2011-04-27 23:38       ` Ted Ts'o
2011-04-28  3:30       ` Rusty Russell
2011-04-26 20:27 ` Davidlohr Bueso
2011-04-26 20:33   ` Thiago Farina
2011-04-27  0:52 ` Ted Ts'o
2011-04-27  1:32   ` Steven Rostedt
2011-04-27  6:47   ` Christoph Hellwig
2011-04-27  8:47     ` gmack
2011-04-27 14:52       ` Ted Ts'o
2011-04-27 16:04         ` Alexey Dobriyan
2011-04-27 16:26           ` Steven Rostedt
2011-04-27  8:35 ` Mike Frysinger
2011-04-27 16:46 ` Al Viro
2011-04-27 17:07   ` Steven Rostedt
2011-04-27 21:46     ` Al Viro
2011-04-27 22:17       ` Thiago Farina
2011-04-27 22:38         ` Pavel Vasilyev
2011-04-27 22:45         ` Al Viro
2011-04-28  0:05       ` Steven Rostedt
2011-04-27 22:21     ` Thiago Farina

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=1303930918.18763.95.camel@gandalf.stny.rr.com \
    --to=rostedt@goodmis.org \
    --cc=adobriyan@gmail.com \
    --cc=davem@davemloft.net \
    --cc=hch@infradead.org \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=rusty@rustcorp.com.au \
    --cc=tfransosi@gmail.com \
    --cc=tytso@mit.edu \
    --cc=viro@zeniv.linux.org.uk \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®