On Fri, 23 Oct 2020 18:32:48 +0200 Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> wrote: > The include/linux/genalloc.h file defined this typedef: > > typedef unsigned long (*genpool_algo_t)(unsigned long *map,unsigned long size,unsigned long start,unsigned int nr,void *data, struct gen_pool *pool, unsigned long start_addr); > > Because it has a type composite of two words (unsigned long), > the parser gets the typedef name wrong: > > .. c:macro:: long > > **Typedef**: Allocation callback function type definition > > Fix the regex in order to accept composite types when > defining a typedef for a function pointer. > > Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> > --- > scripts/kernel-doc | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/scripts/kernel-doc b/scripts/kernel-doc > index 99cd8418ff8a..311d213ee74d 100755 > --- a/scripts/kernel-doc > +++ b/scripts/kernel-doc > @@ -1438,7 +1438,7 @@ sub dump_typedef($$) { > $x =~ s@/\*.*?\*/@@gos; # strip comments. > > # Parse function prototypes > - if ($x =~ /typedef\s+(\w+)\s*\(\*\s*(\w\S+)\s*\)\s*\((.*)\);/ || > + if ($x =~ /typedef\s+(\w+\s*){1,}\(\*\s*(\w\S+)\s*\)\s*\((.*)\);/ || I sure wish we could find a way to make all these regexes more understandable and maintainable. Reviewing a change like this is ... fun. Anyway, it seems to work, but it does now include trailing whitespace in the type portion. So, for example, from include/linux/xarray.h: typedef void (*xa_update_node_t)(struct xa_node *node); The type is parsed as "void " where it was "void" before. The only ill effect I can see is that some non-breaking spaces get inserted into the HTML output, but perhaps it's worth stripping off that trailing space anyway? Thanks, jon