Re: [PATCH] kernel-doc parser mishandles declarations split into lines

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jun 16, 2017 at 09:27:48PM +0200, Markus Heiser wrote:
> 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@xxxxxxxxxxxxxxx/msg12410.html
> 
> Signed-off-by: Markus Heiser <markus.heiser@xxxxxxxxxxx>
> ---
>  scripts/kernel-doc | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/scripts/kernel-doc b/scripts/kernel-doc
> index a26a5f2..fb67994 100755
> --- a/scripts/kernel-doc
> +++ b/scripts/kernel-doc
> @@ -2223,6 +2223,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/;
> @@ -2763,6 +2764,9 @@ sub process_proto_type($$) {
>  
>      while (1) {
>  	if ( $x =~ /([^{};]*)([{};])(.*)/ ) {
> +            if( length $prototype ) {
> +                $prototype .= " "
> +            }
>  	    $prototype .= $1 . $2;

Can't we avoid the issue in dump_enum if we're more careful with not
adding blanks here when not needed, i.e.

           if( length $prototype && length ($1 . $2)) {
                $prototype .= " "
           }

Or do I miss something?
-Daniel

>  	    $prototype .= $1 . $2;
>  	    ($2 eq '{') && $brcount++;
>  	    ($2 eq '}') && $brcount--;
> -- 
> 2.7.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-doc" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
--
To unsubscribe from this list: send the line "unsubscribe linux-doc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux