[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1257181219.28925.13.camel@Joe-Laptop.home>
Date: Mon, 02 Nov 2009 09:00:19 -0800
From: Joe Perches <joe@...ches.com>
To: William Allen Simpson <william.allen.simpson@...il.com>
Cc: Eric Dumazet <eric.dumazet@...il.com>,
Linux Kernel Network Developers <netdev@...r.kernel.org>
Subject: Re: [net-next-2.6 PATCH v4 3/3] TCPCT part 1c: initial SYN
exchange with SYNACK data
On Mon, 2009-11-02 at 07:25 -0500, William Allen Simpson wrote:
> For complex tests, this makes the code much more readable and easier to
> visually verify on code walk-through:
>
> + if (0 < tmp_opt.cookie_plus
> + && tmp_opt.saw_tstamp
> + && !tp->cookie_out_never
> + && (0 < sysctl_tcp_cookie_size
> + || (NULL != tp->cookie_values
> + && 0 < tp->cookie_values->cookie_desired))) {
>
> Consistent use of security style would have obviated a lot of foolish >= 0
> tests that seem to be constantly in need of fixing. It's a bad idea to
> depend on the compiler to catch non-executable code.
Linus wrote a long time back (5+ years):
The reason for "if (x == 8)" comes from the way we're taught to think.
Arguing against that _fact_ is just totally non-productive, and you have
to _force_ yourself to write it the other way around.
And that just means that you will do other mistakes. You'll spend your
time thinking about trying to express your conditionals in strange ways,
and then not think about the _real_ issue.
So let's make a few rules:
- write your logical expressions the way people EXPECT them to be
written. No silly rules that make no sense.
Ergo:
if (x == 8)
is the ONE AND ONLY SANE WAY.
- avoid using assignment inside logical expressions unless you have a
damn good reason to.
Ergo: write
error = myfunction(xxxx)
if (error) {
...
instead of writing
if (error = myfunction(xxxx))
....
which is just unreadable and stupid.
- Don't get hung about stupid rules.
Ergo: sometimes assignments in conditionals make sense, especially in
loops. Don't avoid them just because of some silly rule. But strive to
use an explicit equality test when you do so:
while ((a = function(b)) != 0)
...
is fine.
- The compiler warns about the mistakes that remain, if you follow these
rules.
- mistakes happen. Deal with it. Having tons of rules just makes them
more likely. Expect mistakes, and make sure they are fixed quickly
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists