Re: [PATCH] scripts/bash_aliases: Make man_lsfunc() more robust; Add sed_rm_ccomments().

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

 



Hi Michael,

Please fix some minor things for me (see below).

Thanks,

Alex

On 3/7/21 8:56 PM, Alejandro Colomar wrote:
> This patch makes man_lsfunc() search for the function prototypes,
> instead of relying on the current manual page formatting,
> which might change in the future, and break this function.
> It also simplifies the code, by reusing man_section().
> 
> As a side effect, this change fixed some corner cases, where this
> function failed to find a function, or listed a wrong function.
> 
> Create a new function sed_rm_ccomments(), which is needed by
> man_lsfunc(), and may also be useful in other cases.
> 
> Signed-off-by: Alejandro Colomar <alx.manpages@xxxxxxxxx>
> ---
>  scripts/bash_aliases | 40 ++++++++++++++++++++++------------------
>  1 file changed, 22 insertions(+), 18 deletions(-)
> 
> diff --git a/scripts/bash_aliases b/scripts/bash_aliases
> index d9b6047d1..12fb203e1 100644
> --- a/scripts/bash_aliases
> +++ b/scripts/bash_aliases
> @@ -20,6 +20,21 @@
>  EX_OK=0;
>  EX_USAGE=64;
>  
> +########################################################################
> +#	C
> +
> +#  sed_rm_ccomments()  removes C comments.
> +# It can't handle multiple comments in a sinlge line correctly,
> +# nor mixed or embedded //... and /*...*/ comments.
> +# Use as a filter (see man_lsfunc() in this file).
> +
> +function sed_rm_ccomments()
> +{
> +	sed 's%/\*.*\*/%%' \
> +	|sed -r '\%/\*%,\%\*/%{\%(\*/|/\*)%!d; s%/\*.*%%; s%.*\*/%%;}' \
> +	|sed 's%//.*%%';
> +}
> +
>  ########################################################################
>  #	Linux kernel
>  
> @@ -106,25 +121,14 @@ function man_lsfunc()
>  		return ${EX_USAGE};
>  	fi
>  
> -	find "${@}" -type f \
> -	|xargs grep -l "\.SH SYNOPSIS" \
> -	|sort -V \
> -	|while read -r manpage; do
> -		<${manpage} \
> -		sed -n \
> -			-e '/^\.TH/,/^\.SH/{/^\.SH/!p}' \
> -			-e "/^\.SH SYNOPSIS/p" \
> -			-e "/^\.SH SYNOPSIS/,/^\.SH/{/^\.SH/!p}" \
> -		|sed \
> -			-e '/Feature/,$d' \
> -			-e '/{/,/}/d' \
> -		|man -P cat -l - 2>/dev/null;
> +	for arg in "$@"; do
> +		man_section "${arg}" "SYNOPSIS";

s/"SYNOPSIS"/'SYNOPSIS'/

>  	done \
> -	|sed -n "/^SYNOPSIS/,/^\w/p" \
> -	|grep '^       \w' \
> -	|grep -v ':' \
> -	|sed 's/^[^(]* \**\(\w*\)(.*/\1/' \
> -	|grep '^\w' \
> +	|sed_rm_ccomments \
> +	|pcregrep -Mn \
> +	  "(?s)^ [\w ]+ \**\w+\([\w\s(,)[\]*]+?(...)?\s*\); *$" \

s/"/'/

> +	|grep '^[0-9]' \
> +	|sed -r 's/^[^(]+ +\**(\w+)\(.*/\1/' \
>  	|uniq;
>  }
>  
> 

-- 
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/



[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux