]> granicus.if.org Git - llvm/commitdiff
llvm-strings: support the `-n` option
authorSaleem Abdulrasool <compnerd@compnerd.org>
Tue, 15 Nov 2016 00:43:52 +0000 (00:43 +0000)
committerSaleem Abdulrasool <compnerd@compnerd.org>
Tue, 15 Nov 2016 00:43:52 +0000 (00:43 +0000)
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

test/tools/llvm-strings/length.test [new file with mode: 0644]
tools/llvm-strings/llvm-strings.cpp

diff --git a/test/tools/llvm-strings/length.test b/test/tools/llvm-strings/length.test
new file mode 100644 (file)
index 0000000..f64829d
--- /dev/null
@@ -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
+
index cb0fb9651d9e828323fb1e6b9b7d2ca01313f156..e750995331e333a681f2cd9fb2b48edafdbdd271 100644 (file)
@@ -35,8 +35,15 @@ static cl::opt<bool>
 static cl::alias PrintFileNameShort("f", cl::desc(""),
                                     cl::aliasopt(PrintFileName));
 
+static cl::opt<int>
+    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<size_t>(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("-");