fi;
-function grepc_helper()
+function grepc_find_files()
{
+ files="$(mktemp -t 'grepc.XXXXXX')";
+
find . -type f \
- | grep "$1" \
- | xargs grep -lPI "$2" \
- | xargs grep -lP "$3" \
+ | grep -P '\.[ch]' \
+ | xargs grep -lPI "$1\b" \
+ >"$files";
+}
+
+
+function grepc_helper()
+{
+ xargs grep -lPI "$1" <"$files" \
+ | xargs grep -lP "$2" \
| sort \
- | xargs pcregrep -Mn "$4" /dev/null \
+ | xargs pcregrep -Mn "$3" /dev/null \
| sed -E 's/^[^: ]+:[0-9]+:/\n\n&\n\n/';
}
function grepc_macro_simple()
{
- grepc_helper '\.[ch]$' \
+ grepc_helper \
"#\s*define\s+$1\b[^(]" \
'.' \
"(?s)#\s*define\s+$1\b(?!\().*?[^\\\\]$";
function grepc_macro_func()
{
- grepc_helper '\.[ch]$' \
+ grepc_helper \
"#\s*define\s+$1\(" \
'.' \
"(?s)#\s*define\s+$1\(.*?[^\\\\]$";
function grepc_enum_constant()
{
- grepc_helper '\.[ch]$' \
+ grepc_helper \
'^enum\s' \
"^\s*$1\s*[,=]" \
"(?s)\benum\b\s*([\w\s[\]]|::)*\s*{[^}]*^\s*$1\s*[=,].*?^}.*?;";
function grepc_func_decl()
{
- grepc_helper '\.[ch]$' \
+ grepc_helper \
"\b$1\s*\(" \
'.' \
"(?s)^[\w[]([\w\s\(,\)[\]*]|::)+[\w\s\)*\]]\s+\**$1\s*\([\w\s\(,\)[\]*]+?(...)?\)[\w\s\(,\)[:\]]*;";
function grepc_func_def()
{
- grepc_helper '\.[ch]$' \
+ grepc_helper \
"\b$1\s*\(" \
'.' \
"(?s)^[\w[]([\w\s\(,\)[\]*]|::)*[\w\s\)*\]]\s+\**$1\s*\([\w\s\(,\)[\]*]+?(...)?\)\s*{.*?^}";
function grepc_linux_syscall_decl()
{
- grepc_helper '\.[ch]$' \
+ grepc_helper \
"^asmlinkage\s+[\w\s]+\**sys_$1\s*\(" \
'.' \
"(?s)^asmlinkage\s+[\w\s]+\**sys_$1\s*\(.*?\)";
function grepc_linux_syscall_def()
{
- grepc_helper '\.c$' \
+ grepc_helper \
"SYSCALL_DEFINE.\($1\b" \
'.' \
"(?s)^\w*SYSCALL_DEFINE.\($1\b.*?^}";
function grepc_type_struct_union_enum()
{
- grepc_helper '\.[ch]$' \
+ grepc_helper \
"\b(struct|union|enum)\s+$1\b" \
'.' \
"(?s)^(?!^\s*typedef\b)([\w[]([\w\s\(,\)[\]*]|::)*[\w\s\)*\]]\s+)?\b(struct|union|enum)\s+$1\b\s*[\w\s[\]]*{.*?^}.*?;";
function grepc_type_typedef_simple()
{
- grepc_helper '\.[ch]$' \
+ grepc_helper \
'^\s*typedef\s' \
"\b$1;" \
"(?s)^\s*typedef\s+[^{};]+$1;";
function grepc_type_typedef_struct_union_enum()
{
- grepc_helper '\.[ch]$' \
+ grepc_helper \
'^\s*typedef\s+(struct|union|enum)\b[^;]*$' \
"^( )?}\s*$1;" \
"(?s)^\s*typedef\s+(struct|union|enum)\s+(?:(?!^( )?}|^\s*typedef).)*^( )?}\s*$1;";
function grepc_type_typedef_underlying_struct_union_enum()
{
- find . -type f \
- | grep '\.[ch]$' \
- | xargs grep -hP "^\s*typedef\s+(struct|union|enum)\s+.*\b$1;" \
+ xargs grep -hP "^\s*typedef\s+(struct|union|enum)\s+.*\b$1;" <"$files" \
| sed -E -e 's/^\s*typedef\s+//' -e "s/\s*\**\b$1;.*//" \
| sed -E -e 's/^struct\s+//' -e 's/^union\s+//' -e 's/^enum\s+//' \
| while read t; do
function main()
{
+ grepc_find_files "$1";
+
grepc_macro "$1";
grepc_enum_constant "$1";
grepc_func "$1";