Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7c0d7e87 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab Committed by Jonathan Corbet
Browse files

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: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: default avatarJonathan Corbet <corbet@lwn.net>
parent 151c468b
Loading
Loading
Loading
Loading
+26 −12
Original line number Diff line number Diff line
@@ -1041,10 +1041,23 @@ sub dump_struct($$) {
			$id =~ s/^\*+//;
			foreach my $arg (split /;/, $content) {
				next if ($arg =~ m/^\s*$/);
				if ($arg =~ m/^([^\(]+\(\*?\s*)([\w\.]*)(\s*\).*)/) {
					# pointer-to-function
					my $type = $1;
					my $name = $2;
					my $extra = $3;
					next if (!$name);
					if ($id =~ m/^\s*$/) {
						# anonymous struct/union
						$newmember .= "$type$name$extra;";
					} else {
						$newmember .= "$type$id.$name$extra;";
					}
				} else {
					my $type = $arg;
					my $name = $arg;
					$type =~ s/\s\S+$//;
				$name =~ s/.*\s//;
					$name =~ s/.*\s+//;
					$name =~ s/[:\[].*//;
					$name =~ s/^\*+//;
					next if (($name =~ m/^\s*$/));
@@ -1055,6 +1068,7 @@ sub dump_struct($$) {
						$newmember .= "$type $id.$name;";
					}
				}
			}
			$members =~ s/(struct|union)([^{};]+){([^{}]*)}([^{}\;]*)\;/$newmember/;
			$cont = 1;
		};
@@ -1250,7 +1264,7 @@ sub create_parameterlist($$$$) {
	} elsif ($arg =~ m/\(.+\)\s*\(/) {
	    # pointer-to-function
	    $arg =~ tr/#/,/;
	    $arg =~ m/[^\(]+\(\*?\s*(\w*)\s*\)/;
	    $arg =~ m/[^\(]+\(\*?\s*([\w\.]*)\s*\)/;
	    $param = $1;
	    $type = $arg;
	    $type =~ s/([^\(]+\(\*?)\s*$param/$1/;