summaryrefslogblamecommitdiffstats
path: root/bin/grepc
blob: 107fae3602e241e03682de09e4a39e6db6905376 (plain) (tree)
1
2
3
4
5
6
7
8
9


           





                                          



                             
                                              
                
                                                                           







                                                
                                         
                
                                                                       





                                                

                                








                                  

                                                                                                    







                                                
                                    
                
                              

                                                                                              




                     

                             


 



                             
                                        
























                                                                             



                                       
                                  
                


                                                                              


































                                                           

                                                     
                                                                  







                                                  


                                                             




                     

                                          




               

                         
                           
                        


 
          
#!/bin/bash


if (($# != 1)); then
	>&2 echo "Usage: $0 <identifier>";
	exit 1;
fi;


function grepc_macro_simple()
{
	find . -type f \
	| grep '\.[ch]$' \
	| xargs grep -l "define\s\+$1\b[^(]" \
	| sort \
	| xargs pcregrep -Mn "(?s)define\s+$1\b[^(].*?[^\\\\]$" /dev/null \
	| sed -E 's/^[^: ]+:[0-9]+:/\n\n&\n\n/';
}


function grepc_macro_func()
{
	find . -type f \
	| grep '\.[ch]$' \
	| xargs grep -l "define\s\+$1(" \
	| sort \
	| xargs pcregrep -Mn "(?s)define\s+$1\(.*?[^\\\\]$" /dev/null \
	| sed -E 's/^[^: ]+:[0-9]+:/\n\n&\n\n/';
}


function grepc_macro()
{
	grepc_macro_simple "$1";
	grepc_macro_func "$1";
}


function grepc_func_decl()
{
	find . -type f \
	| grep '\.[ch]$' \
	| xargs grep -l "\b$1\b" \
	| sort \
	| xargs pcregrep -Mn \
	  "(?s)^[\w[][\w\s(,)[:\]*]+\s+\**$1\s*\([\w\s(,)[\]*]+?(...)?\)[\w\s(,)[:\]]*;" /dev/null \
	| sed -E 's/^[^: ]+:[0-9]+:/\n\n&\n\n/';
}


function grepc_func_def()
{
	find . -type f \
	| grep '\.[ch]$' \
	| xargs grep -l "\b$1\s*(" \
	| sort \
	| xargs pcregrep -Mn \
	  "(?s)^[\w[][\w\s(,)[:\]*]+\s+\**$1\s*\([\w\s(,)[\]*]+?(...)?\)\s*{.*?^}" /dev/null \
	| sed -E 's/^[^: ]+:[0-9]+:/\n\n&\n\n/';
}


function grepc_func()
{
	grepc_func_decl "$1";
	grepc_func_def "$1";
}


function grepc_syscall_decl()
{
	find . -type f \
	| grep '\.[ch]$' \
	| xargs grep -l "\bsys_$1\s*(" \
	| sort \
	| xargs pcregrep -Mn \
	  "(?s)^asmlinkage\s+[\w\s]+\**sys_$1\s*\(.*?\)" /dev/null \
	| sed -E 's/^[^: ]+:[0-9]+:/\n\n&\n\n/';
}


function grepc_syscall_def()
{
	find . -type f \
	| grep '\.c$' \
	| xargs grep -l "SYSCALL_DEFINE.($1\b" \
	| sort \
	| xargs pcregrep -Mn "(?s)^\w*SYSCALL_DEFINE.\($1\b.*?^}" /dev/null \
	| sed -E 's/^[^: ]+:[0-9]+:/\n\n&\n\n/';
}


function grepc_syscall()
{
	grepc_syscall_decl "$1";
	grepc_syscall_def "$1";
}


function grepc_type_struct_union_enum()
{
	find . -type f \
	| grep '\.[ch]$' \
	| xargs grep -l "\b$1\b" \
	| sort \
	| xargs pcregrep -Mn \
	  "(?s)^(struct|union|enum)\s+$1\b\s*[\w\s[\]]*{.*?^}.*?;" /dev/null \
	| sed -E 's/^[^: ]+:[0-9]+:/\n\n&\n\n/';
}


function grepc_type_typedef_oneline()
{
	find . -type f \
	| grep '\.[ch]$' \
	| xargs grep -l "^typedef .* $1;" \
	| sort \
	| xargs grep -n "^typedef .* $1;" /dev/null \
	| sed -E 's/^[^: ]+:[0-9]+:/\n\n&\n\n/';
}


function grepc_type_typedef_struct_union_enum()
{
	find . -type f \
	| grep '\.[ch]$' \
	| xargs grep -l "^} $1;" \
	| sort \
	| while read f; do
		grep -n "^} $1;" $f /dev/null \
		| sed -E 's/^([^: ]+:[0-9]+:).*/\n\n\1\n/';

		tac <$f \
		| sed -n "/^} $1;/,/^typedef/p" \
		| tac;
	done;
}


function grepc_type_typedef_underlying_struct_union_enum()
{
	find . -type f \
	| grep '\.[ch]$' \
	| xargs grep -h "^typedef .* *\b$1;" \
	| sed -e 's/^typedef //' -e "s/ *\b$1;.*//" \
	| sed -e 's/^struct //' -e 's/^union //' -e 's/^enum //' \
	| while read t; do
		grepc_type_struct_union_enum "$t";
	done;
}


function grepc_type_typedef()
{
	grepc_type_typedef_oneline "$1";
	grepc_type_typedef_struct_union_enum "$1";
	grepc_type_typedef_underlying_struct_union_enum "$1";
}


function grepc_type()
{
	grepc_type_struct_union_enum "$1";
	grepc_type_typedef "$1";
}


function main()
{
	grepc_macro "$1";
	grepc_func "$1";
	grepc_syscall "$1";
	grepc_type "$1";
}


main "$1";