From owner-svn-src-user@FreeBSD.ORG Wed Dec 30 15:46:21 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AC62B1065694; Wed, 30 Dec 2009 15:46:21 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail05.syd.optusnet.com.au (mail05.syd.optusnet.com.au [211.29.132.186]) by mx1.freebsd.org (Postfix) with ESMTP id 3FD908FC1B; Wed, 30 Dec 2009 15:46:21 +0000 (UTC) Received: from c220-239-235-55.carlnfd3.nsw.optusnet.com.au (c220-239-235-55.carlnfd3.nsw.optusnet.com.au [220.239.235.55]) by mail05.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id nBUFkCPF015254 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 31 Dec 2009 02:46:15 +1100 Date: Thu, 31 Dec 2009 02:46:11 +1100 (EST) From: Bruce Evans X-X-Sender: bde@delplex.bde.org To: John Baldwin In-Reply-To: <200912290746.59011.jhb@freebsd.org> Message-ID: <20091231021707.J48242@delplex.bde.org> References: <200912272213.nBRMDJAC069043@svn.freebsd.org> <20091229021846.U46429@delplex.bde.org> <20091228232151.GA39294@onelab2.iet.unipi.it> <200912290746.59011.jhb@freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: Luigi Rizzo , src-committers@freebsd.org, Luigi Rizzo , Bruce Evans , svn-src-user@freebsd.org Subject: Re: svn commit: r201063 - user/luigi/ipfw3-head/sys/netinet/ipfw X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Dec 2009 15:46:21 -0000 On Tue, 29 Dec 2009, John Baldwin wrote: > On Monday 28 December 2009 6:21:51 pm Luigi Rizzo wrote: >> On Tue, Dec 29, 2009 at 02:38:15AM +1100, Bruce Evans wrote: >>> On Sun, 27 Dec 2009, Luigi Rizzo wrote: >>> >>>> Log: >>>> use a less obfuscated construct to call the hook/unhook functions >>>> >>>> Modified: >>>> user/luigi/ipfw3-head/sys/netinet/ipfw/ip_fw_pfil.c >>> >>> Better unobfuscation: >>> >>>> Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/ip_fw_pfil.c >>> >> ============================================================================== >>>> --- user/luigi/ipfw3-head/sys/netinet/ipfw/ip_fw_pfil.c Sun Dec 27 >>>> 21:58:48 2009 (r201062) >>>> +++ user/luigi/ipfw3-head/sys/netinet/ipfw/ip_fw_pfil.c Sun Dec 27 >>>> 22:13:19 2009 (r201063) >>>> @@ -329,18 +329,17 @@ ipfw_divert(struct mbuf **m0, int incomi >>>> static int >>>> ipfw_hook(int onoff, int pf) >>>> { >>>> + const int arg = PFIL_IN | PFIL_OUT | PFIL_WAITOK; >>> >>> Don't add this obfuscation (a constant used only once stored in a variable >>> used only once, just to avoid 2 long lines (1 after my change). >> >> It is not just that. >> >> I want to tell humans reading the code that the value used in the >> two calls is exactly the same, beyond any chance of misspelling or >> misreading the two long lines. >> >> Then whether or not to store it in a variable is compiler's business, >> same as if i use the constant FOO ( #define FOO 0x11122334455667788LL ) >> 20 times in a piece of code. > > Bruce's cute ?: trick for picking which function pointer to invoke avoided > that problem FWIW as the flags were only passed once. ?: also works for all the other function parameter -- you don't have to read them all and compare them to see that they are the same: if (foo) func1(arg1, FOO | BAR | BAZ, arg3, ... argn); else func234(arg1, FOO | BAR | BAZ, arg3, ... argn); It is no easier (or harder) to read all the identifiers and operators to see that arg2 = FOO | BAR | BAZ is the same in both calls as it is to read all the identifiers to see that all the parameters are to same. Not very easy for either when there are lots of identifiers and/or more worse lining up than above. The above lines could be misformatted to make the correspondence clear, provided the function call lines are short: The ?: trick works especially well for variant function calls when all except 1 of the function and the parameters are the same. I also prefer it when it allows writing an assignment in 1 statement of N lines instead of as N statements in > 2*N lines, no matter how many ?:'s this takes. Bruce