lkml.org 
[lkml]   [2008]   [Aug]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: drop overzealous ERROR: do not initialise statics to 0 or NULL from checkpatch.pl
    On Wed, Aug 13, 2008 at 12:39 PM, John Kacur <jkacur@gmail.com> wrote:
    > Could we drop this somewhat overzealous "ERROR: do not initialise
    > statics to 0 or NULL" from checkpatch.pl?
    >
    > Reasoning:
    > 1. This is not part of Documentation/CodingStyle
    > 2. K&R 2nd.ed do it (pg 83, static int bufp = 0;) The purpose is to
    > remove access to the bufp from external routines, and to avoid name
    > conflict)
    > 3. It can be a good form of documentation.
    > 4. It creates a lot of needless code churn to change this kind of
    > thing for no good reason.
    > 5. It doesn't even change the object size (thus kernel size) to do so.
    > Demo with user space code.
    >
    > jkacur@linux-ipxk:~/try> cat foo.c
    > #include <stdio.h>
    > #include <stdlib.h>
    >
    > static int a[1000];
    >
    > /* Function Prototype */
    > void foo(void);
    > int main(void)
    > {
    > exit(0);
    > }
    >
    > void foo(void)
    > {
    > static int b[1000];
    > static int c;
    > }
    > jkacur@linux-ipxk:~/try> gcc foo.c
    > jkacur@linux-ipxk:~/try> size a.out
    > text data bss dec hex filename
    > 1203 520 8064 9787 263b a.out
    > jkacur@linux-ipxk:~/try> ls -l a.out
    > -rwxr-xr-x 1 jkacur users 11237 2008-08-13 12:26 a.out
    >
    > Now initialize all the statics to 0 and there will be no difference in
    > the object size
    > jkacur@linux-ipxk:~/try> cat foo.c
    > #include <stdio.h>
    > #include <stdlib.h>
    >
    > static int a[1000] = {0};
    >
    > /* Function Prototype */
    > void foo(void);
    > int main(void)
    > {
    > exit(0);
    > }
    >
    > void foo(void)
    > {
    > static int b[1000] = {0};
    > static int c = 0;
    > }
    > jkacur@linux-ipxk:~/try> gcc foo.c
    > jkacur@linux-ipxk:~/try> size a.out
    > text data bss dec hex filename
    > 1203 520 8064 9787 263b a.out
    > <----------------------- No difference with the initialization to 0!!!
    > jkacur@linux-ipxk:~/try> ls -l a.out
    > -rwxr-xr-x 1 jkacur users 11237 2008-08-13 12:26 a.out
    > <----------------------- No difference with the initialization to 0!!!
    >
    >
    > Now if we initialize it to a value other than 0 or NULL, then the bss
    > is decreased at the expense of the data section, which does indeed
    > increase the object size, however checkpatch.pl doesn't complain about
    > this. (it is valid to do this)
    > jkacur@linux-ipxk:~/try> cat foo.c
    > #include <stdio.h>
    > #include <stdlib.h>
    >
    > static int a[1000] = {1};
    >
    > /* Function Prototype */
    > void foo(void);
    > int main(void)
    > {
    > exit(0);
    > }
    >
    > void foo(void)
    > {
    > static int b[1000] = {1};
    > static int c = 1;
    > }
    > jkacur@linux-ipxk:~/try> gcc foo.c
    > jkacur@linux-ipxk:~/try> size a.out
    > text data bss dec hex filename
    > 1203 8568 16 9787 263b a.out
    > jkacur@linux-ipxk:~/try> ls -l a.out
    > -rwxr-xr-x 1 jkacur users 19301 2008-08-13 12:27 a.out
    >

    My apologies for not ccing the maintainers of checkpatch the first
    time. Attached is a patch to remove the check in case anybody agrees
    with me. :)
    The patch is against a recently updated git tree.
    Subject: Remove unnecessary error about initialising statics to 0 or NULL

    Signed-off-by: John Kacur <jkacur at gmail dot com>

    Index: linux-2.6/scripts/checkpatch.pl
    ===================================================================
    --- linux-2.6.orig/scripts/checkpatch.pl
    +++ linux-2.6/scripts/checkpatch.pl
    @@ -1341,11 +1341,6 @@ sub process {
    ERROR("do not initialise externals to 0 or NULL\n" .
    $herecurr);
    }
    -# check for static initialisers.
    - if ($line =~ /\s*static\s.*=\s*(0|NULL|false)\s*;/) {
    - ERROR("do not initialise statics to 0 or NULL\n" .
    - $herecurr);
    - }

    # check for new typedefs, only function parameters and sparse annotations
    # make sense.
    \
     
     \ /
      Last update: 2008-08-13 13:53    [W:0.028 / U:122.836 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site