aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/kernel-doc
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@s-opensource.com>2017-12-18 07:30:16 -0500
committerJonathan Corbet <corbet@lwn.net>2017-12-21 15:41:47 -0500
commit7c0d7e87a16fe615e7913a3d56ce7bd26104ef0b (patch)
tree0794248e3eb713eea950fc5512d6f1c7515b11f4 /scripts/kernel-doc
parent151c468b44a89a9f3173ab8575690014b7249893 (diff)
scripts: kernel-doc: handle nested struct function arguments
Function arguments are different than usual ones. So, an special logic is needed in order to handle such arguments on nested structs. Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com> Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Diffstat (limited to 'scripts/kernel-doc')
-rwxr-xr-xscripts/kernel-doc38
1 files changed, 26 insertions, 12 deletions
diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index c97b89f47795..5d03c9086323 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -1041,18 +1041,32 @@ sub dump_struct($$) {
1041 $id =~ s/^\*+//; 1041 $id =~ s/^\*+//;
1042 foreach my $arg (split /;/, $content) { 1042 foreach my $arg (split /;/, $content) {
1043 next if ($arg =~ m/^\s*$/); 1043 next if ($arg =~ m/^\s*$/);
1044 my $type = $arg; 1044 if ($arg =~ m/^([^\(]+\(\*?\s*)([\w\.]*)(\s*\).*)/) {
1045 my $name = $arg; 1045 # pointer-to-function
1046 $type =~ s/\s\S+$//; 1046 my $type = $1;
1047 $name =~ s/.*\s//; 1047 my $name = $2;
1048 $name =~ s/[:\[].*//; 1048 my $extra = $3;
1049 $name =~ s/^\*+//; 1049 next if (!$name);
1050 next if (($name =~ m/^\s*$/)); 1050 if ($id =~ m/^\s*$/) {
1051 if ($id =~ m/^\s*$/) { 1051 # anonymous struct/union
1052 # anonymous struct/union 1052 $newmember .= "$type$name$extra;";
1053 $newmember .= "$type $name;"; 1053 } else {
1054 $newmember .= "$type$id.$name$extra;";
1055 }
1054 } else { 1056 } else {
1055 $newmember .= "$type $id.$name;"; 1057 my $type = $arg;
1058 my $name = $arg;
1059 $type =~ s/\s\S+$//;
1060 $name =~ s/.*\s+//;
1061 $name =~ s/[:\[].*//;
1062 $name =~ s/^\*+//;
1063 next if (($name =~ m/^\s*$/));
1064 if ($id =~ m/^\s*$/) {
1065 # anonymous struct/union
1066 $newmember .= "$type $name;";
1067 } else {
1068 $newmember .= "$type $id.$name;";
1069 }
1056 } 1070 }
1057 } 1071 }
1058 $members =~ s/(struct|union)([^{};]+){([^{}]*)}([^{}\;]*)\;/$newmember/; 1072 $members =~ s/(struct|union)([^{};]+){([^{}]*)}([^{}\;]*)\;/$newmember/;
@@ -1250,7 +1264,7 @@ sub create_parameterlist($$$$) {
1250 } elsif ($arg =~ m/\(.+\)\s*\(/) { 1264 } elsif ($arg =~ m/\(.+\)\s*\(/) {
1251 # pointer-to-function 1265 # pointer-to-function
1252 $arg =~ tr/#/,/; 1266 $arg =~ tr/#/,/;
1253 $arg =~ m/[^\(]+\(\*?\s*(\w*)\s*\)/; 1267 $arg =~ m/[^\(]+\(\*?\s*([\w\.]*)\s*\)/;
1254 $param = $1; 1268 $param = $1;
1255 $type = $arg; 1269 $type = $arg;
1256 $type =~ s/([^\(]+\(\*?)\s*$param/$1/; 1270 $type =~ s/([^\(]+\(\*?)\s*$param/$1/;