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

Commit 463a0fdc authored by Markus Heiser's avatar Markus Heiser Committed by Jonathan Corbet
Browse files

kernel-doc parser mishandles declarations split into lines

Reported by Johannes Berg [1].  Problem here: function
process_proto_type() concatenates the striped lines of declaration
without any whitespace. A one-liner of::

 struct something {
       struct foo
       bar;
       };

has to be::

 struct something {struct foo bar;};

Without the patching process_proto_type(), the result missed the space
between 'foo' and 'bar'::

 struct something {struct foobar;};

Bugfix of process_proto_type() brings next error when blank lines
between enum declaration::

 warning: Enum value ' ' not described in enum 'foo'

Problem here: dump_enum() does not strip leading whitespaces from
the concatenated string (with the new additional space from
process_proto_type).

[1] https://www.mail-archive.com/linux-doc@vger.kernel.org/msg12410.html



Signed-off-by: default avatarMarkus Heiser <markus.heiser@darmarit.de>
Signed-off-by: default avatarJonathan Corbet <corbet@lwn.net>
parent 33c2f4ec
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -2226,6 +2226,7 @@ sub dump_enum($$) {
    if ($x =~ /enum\s+(\w+)\s*{(.*)}/) {
	$declaration_name = $1;
	my $members = $2;
	$members =~ s/\s+$//;

	foreach my $arg (split ',', $members) {
	    $arg =~ s/^\s*(\w+).*/$1/;
@@ -2766,6 +2767,9 @@ sub process_proto_type($$) {

    while (1) {
	if ( $x =~ /([^{};]*)([{};])(.*)/ ) {
            if( length $prototype ) {
                $prototype .= " "
            }
	    $prototype .= $1 . $2;
	    ($2 eq '{') && $brcount++;
	    ($2 eq '}') && $brcount--;