lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110427214657.GE9487@ZenIV.linux.org.uk>
Date:	Wed, 27 Apr 2011 22:46:57 +0100
From:	Al Viro <viro@...IV.linux.org.uk>
To:	Steven Rostedt <rostedt@...dmis.org>
Cc:	Thiago Farina <tfransosi@...il.com>, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] linux/string.h: Introduce streq macro.

On Wed, Apr 27, 2011 at 01:07:59PM -0400, Steven Rostedt wrote:
> On Wed, 2011-04-27 at 17:46 +0100, Al Viro wrote:
> > On Tue, Apr 26, 2011 at 03:49:49PM -0300, Thiago Farina wrote:
> > > This macro is arguably more readable than its variants:
> > > - !strcmp(a, b)
> > > - strcmp(a, b) == 0
> > 
> > Strongly NACKed.  As far as I'm concerned, it's in the same shitbucket as
> > bcopy(3), bzero(3) et.al.  Use idiomatic C; extensions of that kind are
> > *bad*, since new developers have to learn them.
> 
> What developer has to really learn streq()? I mean it is pretty obvious
> to what it does, as suppose to what bzero and bcopy do. A quick google
> on "streq" brings up lots of matches of people who already do this.

I would.  Coming from BSD background, b* bunch is normal and familiar for
me.  Your streq()...  Nope.  I can use google, but I'd have to stop and
actually do that (and if you bothered to do the same, you would've found
official POSIX manpages for bcopy(3) and friends, complete with
"
    Issue 5

     Moved from X/OPEN UNIX extension to BASE.

    Issue 6

     This function is marked LEGACY.
"
in "CHANGE HISTORY" section.  These are fairly common BSDisms, and if you
grep through drivers/staging you'll find more than one instance in there;
all are deletion fodder).

That's the whole fucking _point_; adding random extensions to the language
leads to the place where Pascal and LISP are and it's not pretty.  Each
might make sense taken separately (hell, bzero(3) would prevent real, honest
to Cthulhu bugs - it's memset(p, 0, n) and we had memset-with-swapped-arguments
bugs fairly often and yes, in our tree most of memset() callers do pass '\0'
as the second argument).  Pile enough of those together and you've got yourself
a dialect only you understand.  _Bad_ idea, since the next thing that happens
is different dialects in different parts of tree.  And the end of non-incestous
code review and fixes.  I've seen it first-hand (OK, second - I had enough
sense to stay out of that particular clusterfuck) on Algol 68 codebase.  I
*really*, *really* do not want to see anything similar ever again.  Especially
on projects I can't just piss upon and walk away from.  The fact that in C
you *can* extend the language that way doesn't make it a good idea.

While we are at it, strcmp() is, indeed, a part of the language.  See
section 7.21.4.2 in C99.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ