scripts/kernel-doc: update script from Linux 5.2
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Sun, 14 Jul 2019 09:30:22 +0000 (11:30 +0200)
committerTom Rini <trini@konsulko.com>
Wed, 24 Jul 2019 18:15:36 +0000 (14:15 -0400)
Update the script from Linux 5.2 to avoid some warnings.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
scripts/kernel-doc

index 3cb6259182fa8eb7f2edc6e2f6a569184004bda6..3350e498b4ce6331d888ed5204ef7586dfc2dd59 100755 (executable)
@@ -212,7 +212,7 @@ my $anon_struct_union = 0;
 my $type_constant = '\b``([^\`]+)``\b';
 my $type_constant2 = '\%([-_\w]+)';
 my $type_func = '(\w+)\(\)';
-my $type_param = '\@(\w*(\.\w+)*(\.\.\.)?)';
+my $type_param = '\@(\w*((\.\w+)|(->\w+))*(\.\.\.)?)';
 my $type_fp_param = '\@(\w+)\(\)';  # Special RST handling for func ptr params
 my $type_env = '(\$\w+)';
 my $type_enum = '\&(enum\s*([_\w]+))';
@@ -1062,7 +1062,7 @@ sub dump_struct($$) {
     my $x = shift;
     my $file = shift;
 
-    if ($x =~ /(struct|union)\s+(\w+)\s*{(.*)}/) {
+    if ($x =~ /(struct|union)\s+(\w+)\s*\{(.*)\}(\s*(__packed|__aligned|__attribute__\s*\(\([a-z0-9,_\s\(\)]*\)\)))*/) {
        my $decl_type = $1;
        $declaration_name = $2;
        my $members = $3;
@@ -1073,8 +1073,9 @@ sub dump_struct($$) {
        # strip comments:
        $members =~ s/\/\*.*?\*\///gos;
        # strip attributes
-       $members =~ s/__attribute__\s*\(\([a-z,_\*\s\(\)]*\)\)//i;
-       $members =~ s/__aligned\s*\([^;]*\)//gos;
+       $members =~ s/\s*__attribute__\s*\(\([a-z0-9,_\*\s\(\)]*\)\)//gi;
+       $members =~ s/\s*__aligned\s*\([^;]*\)//gos;
+       $members =~ s/\s*__packed\s*//gos;
        $members =~ s/\s*CRYPTO_MINALIGN_ATTR//gos;
        # replace DECLARE_BITMAP
        $members =~ s/DECLARE_BITMAP\s*\(([^,)]+),\s*([^,)]+)\)/unsigned long $1\[BITS_TO_LONGS($2)\]/gos;
@@ -1148,20 +1149,20 @@ sub dump_struct($$) {
                                }
                        }
                }
-               $members =~ s/(struct|union)([^\{\};]+)\{([^\{\}]*)}([^\{\}\;]*)\;/$newmember/;
+               $members =~ s/(struct|union)([^\{\};]+)\{([^\{\}]*)\}([^\{\}\;]*)\;/$newmember/;
        }
 
        # Ignore other nested elements, like enums
-       $members =~ s/({[^\{\}]*})//g;
+       $members =~ s/(\{[^\{\}]*\})//g;
 
        create_parameterlist($members, ';', $file, $declaration_name);
        check_sections($file, $declaration_name, $decl_type, $sectcheck, $struct_actual);
 
        # Adjust declaration for better display
-       $declaration =~ s/([{;])/$1\n/g;
-       $declaration =~ s/}\s+;/};/g;
+       $declaration =~ s/([\{;])/$1\n/g;
+       $declaration =~ s/\}\s+;/};/g;
        # Better handle inlined enums
-       do {} while ($declaration =~ s/(enum\s+{[^}]+),([^\n])/$1,\n$2/);
+       do {} while ($declaration =~ s/(enum\s+\{[^\}]+),([^\n])/$1,\n$2/);
 
        my @def_args = split /\n/, $declaration;
        my $level = 1;
@@ -1171,12 +1172,12 @@ sub dump_struct($$) {
                $clause =~ s/\s+$//;
                $clause =~ s/\s+/ /;
                next if (!$clause);
-               $level-- if ($clause =~ m/(})/ && $level > 1);
+               $level-- if ($clause =~ m/(\})/ && $level > 1);
                if (!($clause =~ m/^\s*#/)) {
                        $declaration .= "\t" x $level;
                }
                $declaration .= "\t" . $clause . "\n";
-               $level++ if ($clause =~ m/({)/ && !($clause =~m/}/));
+               $level++ if ($clause =~ m/(\{)/ && !($clause =~m/\}/));
        }
        output_declaration($declaration_name,
                           'struct',
@@ -1244,7 +1245,7 @@ sub dump_enum($$) {
     # strip #define macros inside enums
     $x =~ s@#\s*((define|ifdef)\s+|endif)[^;]*;@@gos;
 
-    if ($x =~ /enum\s+(\w+)\s*{(.*)}/) {
+    if ($x =~ /enum\s+(\w+)\s*\{(.*)\}/) {
        $declaration_name = $1;
        my $members = $2;
        my %_members;
@@ -1473,7 +1474,7 @@ sub push_parameter($$$$) {
        if (!defined $parameterdescs{$param} && $param !~ /^#/) {
                $parameterdescs{$param} = $undescribed;
 
-               if (show_warnings($type, $declaration_name)) {
+               if (show_warnings($type, $declaration_name) && $param !~ /\./) {
                        print STDERR
                              "${file}:$.: warning: Function parameter or member '$param' not described in '$declaration_name'\n";
                        ++$warnings;
@@ -1785,7 +1786,7 @@ sub process_proto_type($$) {
     }
 
     while (1) {
-       if ( $x =~ /([^{};]*)([{};])(.*)/ ) {
+       if ( $x =~ /([^\{\};]*)([\{\};])(.*)/ ) {
             if( length $prototype ) {
                 $prototype .= " "
             }
@@ -1904,13 +1905,13 @@ sub process_name($$) {
            ++$warnings;
        }
 
-       if ($identifier =~ m/^struct/) {
+       if ($identifier =~ m/^struct\b/) {
            $decl_type = 'struct';
-       } elsif ($identifier =~ m/^union/) {
+       } elsif ($identifier =~ m/^union\b/) {
            $decl_type = 'union';
-       } elsif ($identifier =~ m/^enum/) {
+       } elsif ($identifier =~ m/^enum\b/) {
            $decl_type = 'enum';
-       } elsif ($identifier =~ m/^typedef/) {
+       } elsif ($identifier =~ m/^typedef\b/) {
            $decl_type = 'typedef';
        } else {
            $decl_type = 'function';