mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-29 17:23:36 +00:00
scripts: kernel-doc: don't mangle with parameter list
While kernel-doc needs to parse parameters in order to identify its name, it shouldn't be touching the type, as parsing it is very difficult, and errors happen. One current error is when parsing this parameter: const u32 (*tab)[256] Found at ./lib/crc32.c, on this function: u32 __pure crc32_be_generic (u32 crc, unsigned char const *p, size_t len, const u32 (*tab)[256], u32 polynomial); The current logic mangles it, producing this output: const u32 ( *tab That's something that it is not recognizeable. So, instead, let's push the argument as-is, and use it when printing the function prototype and when describing each argument. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
47bcacfd2b
commit
ed8348e23a
@ -655,10 +655,10 @@ sub output_function_man(%) {
|
||||
$type = $args{'parametertypes'}{$parameter};
|
||||
if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
|
||||
# pointer-to-function
|
||||
print ".BI \"" . $parenth . $1 . "\" " . $parameter . " \") (" . $2 . ")" . $post . "\"\n";
|
||||
print ".BI \"" . $parenth . $1 . "\" " . " \") (" . $2 . ")" . $post . "\"\n";
|
||||
} else {
|
||||
$type =~ s/([^\*])$/$1 /;
|
||||
print ".BI \"" . $parenth . $type . "\" " . $parameter . " \"" . $post . "\"\n";
|
||||
print ".BI \"" . $parenth . $type . "\" " . " \"" . $post . "\"\n";
|
||||
}
|
||||
$count++;
|
||||
$parenth = "";
|
||||
@ -929,7 +929,7 @@ sub output_function_rst(%) {
|
||||
# pointer-to-function
|
||||
print $1 . $parameter . ") (" . $2 . ")";
|
||||
} else {
|
||||
print $type . " " . $parameter;
|
||||
print $type;
|
||||
}
|
||||
}
|
||||
if ($args{'typedef'}) {
|
||||
@ -954,7 +954,7 @@ sub output_function_rst(%) {
|
||||
$type = $args{'parametertypes'}{$parameter};
|
||||
|
||||
if ($type ne "") {
|
||||
print "``$type $parameter``\n";
|
||||
print "``$type``\n";
|
||||
} else {
|
||||
print "``$parameter``\n";
|
||||
}
|
||||
@ -1479,7 +1479,7 @@ sub create_parameterlist($$$$) {
|
||||
# Treat preprocessor directive as a typeless variable just to fill
|
||||
# corresponding data structures "correctly". Catch it later in
|
||||
# output_* subs.
|
||||
push_parameter($arg, "", $file);
|
||||
push_parameter($arg, "", "", $file);
|
||||
} elsif ($arg =~ m/\(.+\)\s*\(/) {
|
||||
# pointer-to-function
|
||||
$arg =~ tr/#/,/;
|
||||
@ -1488,7 +1488,7 @@ sub create_parameterlist($$$$) {
|
||||
$type = $arg;
|
||||
$type =~ s/([^\(]+\(\*?)\s*$param/$1/;
|
||||
save_struct_actual($param);
|
||||
push_parameter($param, $type, $file, $declaration_name);
|
||||
push_parameter($param, $type, $arg, $file, $declaration_name);
|
||||
} elsif ($arg) {
|
||||
$arg =~ s/\s*:\s*/:/g;
|
||||
$arg =~ s/\s*\[/\[/g;
|
||||
@ -1513,26 +1513,28 @@ sub create_parameterlist($$$$) {
|
||||
foreach $param (@args) {
|
||||
if ($param =~ m/^(\*+)\s*(.*)/) {
|
||||
save_struct_actual($2);
|
||||
push_parameter($2, "$type $1", $file, $declaration_name);
|
||||
|
||||
push_parameter($2, "$type $1", $arg, $file, $declaration_name);
|
||||
}
|
||||
elsif ($param =~ m/(.*?):(\d+)/) {
|
||||
if ($type ne "") { # skip unnamed bit-fields
|
||||
save_struct_actual($1);
|
||||
push_parameter($1, "$type:$2", $file, $declaration_name)
|
||||
push_parameter($1, "$type:$2", $arg, $file, $declaration_name)
|
||||
}
|
||||
}
|
||||
else {
|
||||
save_struct_actual($param);
|
||||
push_parameter($param, $type, $file, $declaration_name);
|
||||
push_parameter($param, $type, $arg, $file, $declaration_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub push_parameter($$$$) {
|
||||
sub push_parameter($$$$$) {
|
||||
my $param = shift;
|
||||
my $type = shift;
|
||||
my $org_arg = shift;
|
||||
my $file = shift;
|
||||
my $declaration_name = shift;
|
||||
|
||||
@ -1596,8 +1598,8 @@ sub push_parameter($$$$) {
|
||||
# "[blah" in a parameter string;
|
||||
###$param =~ s/\s*//g;
|
||||
push @parameterlist, $param;
|
||||
$type =~ s/\s\s+/ /g;
|
||||
$parametertypes{$param} = $type;
|
||||
$org_arg =~ s/\s\s+/ /g;
|
||||
$parametertypes{$param} = $org_arg;
|
||||
}
|
||||
|
||||
sub check_sections($$$$$) {
|
||||
|
Loading…
Reference in New Issue
Block a user