blob: 24aec804f92055413703749b838c00b8dca1a23b (
plain) (
tree)
|
|
#!/bin/bash
if (($# != 1)); then
>&2 echo "Usage: $0 <identifier>";
exit 1;
fi;
function grepc_macro_simple()
{
find . -type f \
| grep '\.[ch]$' \
| xargs grep -lP "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 -lP "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_enum_constant()
{
find . -type f \
| grep '\.[ch]$' \
| xargs grep -lP "\b$1\s*=" \
| sort \
| xargs pcregrep -Mn \
"(?s)\benum\b\s*[\w\s[\]]*{[^}]*\b$1\s*[=,].*?^}.*?;" /dev/null \
| sed -E 's/^[^: ]+:[0-9]+:/\n\n&\n\n/';
}
function grepc_func_decl()
{
find . -type f \
| grep '\.[ch]$' \
| xargs grep -lP "\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 -lP "\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 -lP "\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 -lP "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 -lP "\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 -lP "^typedef .* $1;" \
| sort \
| xargs grep -nP "^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 -lP "^} $1;" \
| sort \
| while read f; do
grep -nP "^} $1;" $f /dev/null \
| sed -E 's/^([^: ]+:[0-9]+:).*/\n\n\1\n/';
tac <$f \
| pcregrep -Mh "(?s)^typedef\s.*^}\s*$1;" \
| tac;
done;
}
function grepc_type_typedef_underlying_struct_union_enum()
{
find . -type f \
| grep '\.[ch]$' \
| xargs grep -hP "^typedef .* *\b$1;" \
| sed -E -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_enum_constant "$1";
grepc_func "$1";
grepc_syscall "$1";
grepc_type "$1";
}
main "$1";
|