From: Saleem Abdulrasool Date: Tue, 15 Nov 2016 00:43:52 +0000 (+0000) Subject: llvm-strings: support the `-n` option X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fe23a5c29fbb7fcb3703fb965dff6d7983c3474d;p=llvm llvm-strings: support the `-n` option Permit specifying the match length (the `-n` or `--bytes` option). The deprecated `-[length]` form is not supported as an option. This allows the strings tool to display only the specified length strings rather than the hardcoded default length of >= 4. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286914 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/tools/llvm-strings/length.test b/test/tools/llvm-strings/length.test new file mode 100644 index 00000000000..f64829dc885 --- /dev/null +++ b/test/tools/llvm-strings/length.test @@ -0,0 +1,24 @@ +RUN: sed -n 's/^STDIN: //p' %s | llvm-strings | FileCheck --check-prefix CHECK-DEFAULT %s +RUN: sed -n 's/^STDIN: //p' %s | not llvm-strings -n 0 2>&1 | FileCheck --check-prefix CHECK-0 %s +RUN: sed -n 's/^STDIN: //p' %s | llvm-strings -n 1 | FileCheck --check-prefix CHECK-1 %s +RUN: sed -n 's/^STDIN: //p' %s | llvm-strings -n 2 | FileCheck --check-prefix CHECK-2 %s + +STDIN: a +STDIN: ab +STDIN: abc +STDIN: abcd + +CHECK-DEFAULT: abcd + +CHECK-0: invalid minimum string length 0 + +CHECK-1: a +CHECK-1: ab +CHECK-1: abc +CHECK-1: abcd + +CHECK-2-NOT: a +CHECK-2: ab +CHECK-2: abc +CHECK-2: abcd + diff --git a/tools/llvm-strings/llvm-strings.cpp b/tools/llvm-strings/llvm-strings.cpp index cb0fb9651d9..e750995331e 100644 --- a/tools/llvm-strings/llvm-strings.cpp +++ b/tools/llvm-strings/llvm-strings.cpp @@ -35,8 +35,15 @@ static cl::opt static cl::alias PrintFileNameShort("f", cl::desc(""), cl::aliasopt(PrintFileName)); +static cl::opt + MinLength("bytes", cl::desc("Print sequences of the specified length"), + cl::init(4)); +static cl::alias MinLengthShort("n", cl::desc(""), cl::aliasopt(MinLength)); + static void strings(raw_ostream &OS, StringRef FileName, StringRef Contents) { auto print = [&OS, FileName](StringRef L) { + if (L.size() < static_cast(MinLength)) + return; if (PrintFileName) OS << FileName << ": "; OS << L << '\n'; @@ -48,12 +55,11 @@ static void strings(raw_ostream &OS, StringRef FileName, StringRef Contents) { if (S == nullptr) S = P; } else if (S) { - if (P - S > 3) - print(StringRef(S, P - S)); + print(StringRef(S, P - S)); S = nullptr; } } - if (S && E - S > 3) + if (S) print(StringRef(S, E - S)); } @@ -62,6 +68,10 @@ int main(int argc, char **argv) { PrettyStackTraceProgram X(argc, argv); cl::ParseCommandLineOptions(argc, argv, "llvm string dumper\n"); + if (MinLength == 0) { + errs() << "invalid minimum string length 0\n"; + return EXIT_FAILURE; + } if (InputFileNames.empty()) InputFileNames.push_back("-");