On Mon, 2020-10-26 at 08:03 +0100, Mauro Carvalho Chehab wrote: [] > Well, this can help: > my $typedef_type = qr { ((?:\w+\s+){1,}) }x; unbounded captures are generally bad, I suggest a limit like {1,5} > if ($x =~ /typedef\s+((?:\w+\s+){1,})\(\*?\s*(\w\S+)\s*\)\s*\((.*)\);/ || > $x =~ /typedef\s+((?:\w+\s+){1,})\s*\*?(\w\S+)\s*\s*\((.*)\);/) { [] > Fix the regex in order to accept composite types when > defining a typedef for a function pointer. [] > diff --git a/scripts/kernel-doc b/scripts/kernel-doc [] > @@ -1438,13 +1438,14 @@ sub dump_typedef($$) { > $x =~ s@/\*.*?\*/@@gos; # strip comments. > > > # Parse function prototypes > - if ($x =~ /typedef\s+(\w+)\s*\(\*\s*(\w\S+)\s*\)\s*\((.*)\);/ || > - $x =~ /typedef\s+(\w+)\s*(\w\S+)\s*\s*\((.*)\);/) { > + if ($x =~ /typedef\s+((?:\w+\s+){1,})\(\*?\s*(\w\S+)\s*\)\s*\((.*)\);/ || > + $x =~ /typedef\s+((?:\w+\s+){1,})\s*\*?(\w\S+)\s*\s*\((.*)\);/) { This typedef does not allow * returns like const unsigned char *(*string)(args...); or unsigned char *const(*fn)(args...); or void *(*alloc)(args...); (not to mention the truly unusual stuff like the typedefs in tools/testing/selftests/bpf/progs/btf_dump_test_case_syntax.c) typedef void (* (*signal_t)(int, void (*)(int)))(int); typedef char * (*fn_ptr_arr1_t[10])(int **); typedef char * (* const (* const fn_ptr_arr2_t[5])())(char * (*)(int));