On Fri, Apr 06, 2007 at 05:53:25PM -0700, Randy Dunlap wrote: > From: Jan Engelhardt <[EMAIL PROTECTED]> > > Unfortunately, kernel-doc has problems with a struct field like this: > uint8_t databuf[NAND_MAX_PAGESIZE + NAND_MAX_OOBSIZE]; > > simply due to the spaces around the "+" sign, so drop all spaces inside > [...] so that parsing is done correctly (in some sense). > > Warning(linux-2.6.20-git15/include/linux/mtd/nand.h:304): No description > found for parameter 'NAND_MAX_OOBSIZE]' > > This needs to sit in -mm for awhile to see if it has any adverse effects. > > And yes, this is just a hack until kernel-doc learns to do better > parsing. > > Signed-off-by: Jan Engelhardt <[EMAIL PROTECTED]> > Signed-off-by: Randy Dunlap <[EMAIL PROTECTED]> > --- > scripts/kernel-doc | 5 +++++ > 1 file changed, 5 insertions(+) > > --- linux-2.6.21-rc6.orig/scripts/kernel-doc > +++ linux-2.6.21-rc6/scripts/kernel-doc > @@ -1452,6 +1452,11 @@ sub create_parameterlist($$$) { > $arg =~ s/\s*:\s*/:/g; > $arg =~ s/\s*\[/\[/g; > > + # no spaces inside [array size expression]; > + # messes up split/pop/shift/unshift below; > + while ($arg =~ s/\[(.*)\s+(.*)\]/[$1$2]/) { > + } > + > my @args = split('\s*,\s*', $arg); > if ($args[0] =~ m/\*/) { > $args[0] =~ s/(\*+)\s*/ $1/; > -
In a different approach here's a patch that handles the special case of composite arithmetic expressions in array size initializers. With it, prior to pushing the split strings on the @first_arg array, I split the keywords before the array name as before and then keep the array name along with the subscript expression as a single whole element which gets pushed last. In this manner, kernel-doc produces correct output without removing whitespaces which makes the array subscripts unreadable in the docs. Signed-off-by: Borislav Petkov <[EMAIL PROTECTED]> --- 21-rc6/scripts/kernel-doc.orig 2007-04-07 16:48:51.000000000 +0200 +++ 21-rc6/scripts/kernel-doc 2007-04-07 16:51:17.000000000 +0200 @@ -1456,7 +1456,16 @@ sub create_parameterlist($$$) { if ($args[0] =~ m/\*/) { $args[0] =~ s/(\*+)\s*/ $1/; } - my @first_arg = split('\s+', shift @args); + + my @first_arg; + if ($args[0] =~ /^(.*\s+)(.*?\[.*\].*)$/) { + shift @args; + push(@first_arg, split('\s+', $1)); + push(@first_arg, $2); + } else { + @first_arg = split('\s+', shift @args); + } + unshift(@args, pop @first_arg); $type = join " ", @first_arg; -- Regards/Gruß, Boris. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/