grepc_find_files()
{
- files="$(mktemp -t 'grepc.XXXXXX')";
-
if [ "$git" = 'yes' ]; then
git ls-files $FILES;
else
find $FILES -type f;
fi \
| grep -P -- "$ext" \
- | xargs grep -lPI -- "$1\b" \
- >"$files";
+ | xargs grep -lPI -- "$1\b";
}
grepc_helper()
{
- xargs grep -lPI -- "$1" <"$files" \
+ xargs grep -lPI -- "$1" \
| xargs grep -lP -- "$2" \
| sort \
| xargs pcregrep $lflag -Mn -- "$3" /dev/null \
grepc_helper \
'\benum\b' \
"^[ \t]*$1\b\s*[,=]" \
- "(?s)^([\w[]+[\w\s]*)?\benum\b\s*([\w\s[\]]|::)*\s*{[^}]*^[ \t]*$1\b\s*[=,].*?^}.*?;";
+ '(?s)^([\w[]+[\w\s]*)?\benum\b\s*([\w\s[\]]|::)*\s*{[^}]*^[ \t]*'"$1"'\b\s*[=,].*?^}.*?;' \
+ <"$files";
}
grepc_helper \
"\b$1\s*\(" \
'.' \
- "(?s)^[\w[]([\w\s\(,\)[\]*]|::)+[\w\s\)*\]]\s+\**$1\s*\([\w\s\(,\)[\]*]+?(...)?\)[\w\s\(,\)[:\]]*;";
+ '(?s)^[\w[]([\w\s\(,\)[\]*]|::)+[\w\s\)*\]]\s+\**'"$1"'\s*\([\w\s\(,\)[\]*]+?(...)?\)[\w\s\(,\)[:\]]*;' \
+ <"$files";
}
grepc_helper \
"\b$1\s*\(" \
'.' \
- "(?s)^[\w[]([\w\s\(,\)[\]*]|::)*[\w\s\)*\]]\s+\**$1\s*\([\w\s\(,\)[\]*]+?(...)?\)\s*{.*?^}";
+ '(?s)^[\w[]([\w\s\(,\)[\]*]|::)*[\w\s\)*\]]\s+\**'"$1"'\s*\([\w\s\(,\)[\]*]+?(...)?\)\s*{.*?^}' \
+ <"$files";
}
grepc_helper \
"^asmlinkage\s+[\w\s]+\**sys_$1\s*\(" \
'.' \
- "(?s)^asmlinkage\s+[\w\s]+\**sys_$1\s*\(.*?\)";
+ '(?s)^asmlinkage\s+[\w\s]+\**'"sys_$1"'\s*\(.*?\)' \
+ <"$files";
}
grepc_helper \
"SYSCALL_DEFINE.\($1\b" \
'.' \
- "(?s)^(COMPAT_)?SYSCALL_DEFINE.\($1\b.*?^}";
+ '(?s)^(COMPAT_)?SYSCALL_DEFINE.\('"$1"'\b.*?^}' \
+ <"$files";
}
grepc_helper \
"#\s*define\s+$1\(" \
'.' \
- '(?s)^[ \t]*#\s*define\s+'"$1"'\(.*?[^\\]$';
+ '(?s)^[ \t]*#\s*define\s+'"$1"'\(.*?[^\\]$' \
+ <"$files";
}
grepc_helper \
"#\s*define\s+$1\b[^(]" \
'.' \
- '(?s)^[ \t]*#\s*define\s+'"$1"'\b(?!\().*?[^\\]$';
+ '(?s)^[ \t]*#\s*define\s+'"$1"'\b(?!\().*?[^\\]$' \
+ <"$files";
}
grepc_helper \
"\b(struct|union|enum)\s+$1\b" \
'.' \
- "(?s)^(?!^[ \t]*typedef\b)([\w[]([\w\s\(,\)[\]*]|::)*[\w\s\)*\]]\s+)?\b(struct|union|enum)\s+$1\b\s*[\w\s[\]]*{.*?^}.*?;";
+ '(?s)^(?!^[ \t]*typedef\b)([\w[]([\w\s\(,\)[\]*]|::)*[\w\s\)*\]]\s+)?\b(struct|union|enum)\s+'"$1"'\b\s*[\w\s[\]]*{.*?^}.*?;';
}
grepc_helper \
'^[ \t]*typedef\s' \
"\b$1;" \
- "(?s)^[ \t]*typedef\s+[^{};]+$1;";
+ '(?s)^[ \t]*typedef\s+[^{};]+'"$1"';' \
+ <"$files";
}
grepc_helper \
'^[ \t]*typedef\s+(struct|union|enum)\b[^;]*$' \
"^( )?}\s*$1;" \
- "(?s)^[ \t]*typedef\s+(struct|union|enum)\s+(?:(?!^( )?}|^\s*typedef).)*^( )?}\s*$1;";
+ '(?s)^[ \t]*typedef\s+(struct|union|enum)\s+(?:(?!^( )?}|^\s*typedef).)*^( )?}\s*'"$1"';' \
+ <"$files";
}
| sed -E -e 's/^struct\s+//' -e 's/^union\s+//' -e 's/^enum\s+//' \
| while read -r t; do
test "$1" != "$t" \
- && grepc_type_struct_union_enum "$t";
+ && grepc_find_files "$t" \
+ | grepc_type_struct_union_enum "$t";
done;
}
grepc_helper \
'^[ \t]*typedef\s' \
"\(\**$1\)\s*\(" \
- "(?s)^[ \t]*typedef\s+[^{};]+\(\**$1\)\s*\([^{};]+;";
+ '(?s)^[ \t]*typedef\s+[^{};]+\(\**'"$1"'\)\s*\([^{};]+;' \
+ <"$files";
}
grepc_type()
{
- grepc_type_struct_union_enum "$1";
+ grepc_type_struct_union_enum "$1" <"$files";
grepc_type_typedef "$1";
}
grepc_helper \
'\benum\b' \
"\b$1\b" \
- "(?s)^([\w[]+[\w\s]*)?\benum\b\s*([\w\s[\]]|::)*\s*{[^}]*^\s*\w+[\w\s[\]=]*\b$1\b.*?^}.*?;";
+ '(?s)^([\w[]+[\w\s]*)?\benum\b\s*([\w\s[\]]|::)*\s*{[^}]*^\s*\w+[\w\s[\]=]*\b'"$1"'\b.*?^}.*?;' \
+ <"$files";
}
grepc_helper \
"\b$1\b" \
'.' \
- "(?s)^[\w[]([\w\s\(,\)[\]*]|::)*[\w\s\)*\]]\s+\**\w+\s*\([\w\s\(,\)[\]*]+?(...)?\)\s*{(?:(?!^}).)*\b$1\b.*?^}";
+ '(?s)^[\w[]([\w\s\(,\)[\]*]|::)*[\w\s\)*\]]\s+\**\w+\s*\([\w\s\(,\)[\]*]+?(...)?\)\s*{(?:(?!^}).)*\b'"$1"'\b.*?^}' \
+ <"$files";
}
grepc_helper \
"SYSCALL_DEFINE.\(" \
"\b$1\b" \
- "(?s)^(COMPAT_)?SYSCALL_DEFINE.\(\w+\b(?:(?!^}).)*\b$1\b.?^}";
+ '(?s)^(COMPAT_)?SYSCALL_DEFINE.\(\w+\b(?:(?!^}).)*\b'"$1"'\b.?^}' \
+ <"$files";
}
grepc_helper \
"\b$1\b" \
'define' \
- '(?s)^[ \t]*#\s*define\s+\w+\b(\([^\)]*\))?(?:(?![^\\]$).)*'"\b$1\b"'.*?[^\\]$';
+ '(?s)^[ \t]*#\s*define\s+\w+\b(\([^\)]*\))?(?:(?![^\\]$).)*\b'"$1"'\b.*?[^\\]$' \
+ <"$files";
}
grepc_helper \
"\b(struct|union)\b" \
"\b$1\b" \
- "(?s)^(?!^[ \t]*typedef\b)([\w[]([\w\s\(,\)[\]*]|::)*[\w\s\)*\]]\s+)?\b(struct|union)\s+\w+\s*[\w\s[\]]*{(?:(?!^}).)*?\b$1\b.*?^}.*?;";
+ '(?s)^(?!^[ \t]*typedef\b)([\w[]([\w\s\(,\)[\]*]|::)*[\w\s\)*\]]\s+)?\b(struct|union)\s+\w+\s*[\w\s[\]]*{(?:(?!^}).)*?\b'"$1"'\b.*?^}.*?;' \
+ <"$files";
}
grepc_helper \
'^[ \t]*typedef\s' \
"\b$1\b" \
- "(?s)^[ \t]*typedef\s+[^{};]*\b$1\b[^{};]+;";
+ '(?s)^[ \t]*typedef\s+[^{};]*\b'"$1"'\b[^{};]+;' \
+ <"$files";
}
grepc_helper \
'^[ \t]*typedef\s+(struct|union)\b[^;]*$' \
"\b$1\b" \
- "(?s)^[ \t]*typedef\s+(struct|union)\s+[\w\s[\]]*{(?:(?!^( )?}|^\s*typedef).)*\b$1\b(?:(?!^( )?}|^\s*typedef).)*^( )?}\s*\w+;";
+ '(?s)^[ \t]*typedef\s+(struct|union)\s+[\w\s[\]]*{(?:(?!^( )?}|^\s*typedef).)*\b'"$1"'\b(?:(?!^( )?}|^\s*typedef).)*^( )?}\s*\w+;' \
+ <"$files";
}
main()
{
+ files="$(mktemp -t 'grepc.XXXXXX')";
+
grepc_parse_cmd $@;
- grepc_find_files "$identifier";
+ grepc_find_files "$identifier" >"$files";
grepc_search "$identifier" \
| if [ -n "$lflag" ]; then
sort \