[llvm] r292707 - llvm-strings: add support for `-t`

Saleem Abdulrasool via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 20 18:36:29 PST 2017


Author: compnerd
Date: Fri Jan 20 20:36:28 2017
New Revision: 292707

URL: http://llvm.org/viewvc/llvm-project?rev=292707&view=rev
Log:
llvm-strings: add support for `-t`

Allow printing the file content offset via the `-t` or `--radix` option.

Added:
    llvm/trunk/test/tools/llvm-strings/Inputs/numbers
    llvm/trunk/test/tools/llvm-strings/radix.test
Modified:
    llvm/trunk/tools/llvm-strings/llvm-strings.cpp

Added: llvm/trunk/test/tools/llvm-strings/Inputs/numbers
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-strings/Inputs/numbers?rev=292707&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-strings/Inputs/numbers (added)
+++ llvm/trunk/test/tools/llvm-strings/Inputs/numbers Fri Jan 20 20:36:28 2017
@@ -0,0 +1,10 @@
+one
+two
+three
+four
+five
+six
+seven
+eight
+nine
+ten

Added: llvm/trunk/test/tools/llvm-strings/radix.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-strings/radix.test?rev=292707&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-strings/radix.test (added)
+++ llvm/trunk/test/tools/llvm-strings/radix.test Fri Jan 20 20:36:28 2017
@@ -0,0 +1,33 @@
+RUN: llvm-strings %S/Inputs/numbers | FileCheck %s -check-prefix CHECK-NONE
+RUN: llvm-strings -t d %S/Inputs/numbers | FileCheck %s -check-prefix CHECK-DEC
+RUN: llvm-strings -t o %S/Inputs/numbers | FileCheck %s -check-prefix CHECK-OCT
+RUN: llvm-strings -t x %S/Inputs/numbers | FileCheck %s -check-prefix CHECK-HEX
+
+CHECK-NONE: three
+CHECK-NONE: four
+CHECK-NONE: five
+CHECK-NONE: seven
+CHECK-NONE: eight
+CHECK-NONE: nine
+
+CHECK-DEC:      8 three
+CHECK-DEC:     14 four
+CHECK-DEC:     19 five
+CHECK-DEC:     28 seven
+CHECK-DEC:     34 eight
+CHECK-DEC:     40 nine
+
+CHECK-OCT:     10 three
+CHECK-OCT:     16 four
+CHECK-OCT:     23 five
+CHECK-OCT:     34 seven
+CHECK-OCT:     42 eight
+CHECK-OCT:     50 nine
+
+CHECK-HEX:      8 three
+CHECK-HEX:      e four
+CHECK-HEX:     13 five
+CHECK-HEX:     1c seven
+CHECK-HEX:     22 eight
+CHECK-HEX:     28 nine
+

Modified: llvm/trunk/tools/llvm-strings/llvm-strings.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-strings/llvm-strings.cpp?rev=292707&r1=292706&r2=292707&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-strings/llvm-strings.cpp (original)
+++ llvm/trunk/tools/llvm-strings/llvm-strings.cpp Fri Jan 20 20:36:28 2017
@@ -15,6 +15,7 @@
 #include "llvm/Object/Binary.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/Error.h"
+#include "llvm/Support/Format.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/Program.h"
@@ -40,27 +41,51 @@ static cl::opt<int>
               cl::init(4));
 static cl::alias MinLengthShort("n", cl::desc(""), cl::aliasopt(MinLength));
 
+enum radix { none, octal, hexadecimal, decimal };
+static cl::opt<radix>
+    Radix("radix", cl::desc("print the offset within the file"),
+          cl::values(clEnumValN(octal, "o", "octal"),
+                     clEnumValN(hexadecimal, "x", "hexadecimal"),
+                     clEnumValN(decimal, "d", "decimal")),
+          cl::init(none));
+static cl::alias RadixShort("t", cl::desc(""), cl::aliasopt(Radix));
+
 static void strings(raw_ostream &OS, StringRef FileName, StringRef Contents) {
-  auto print = [&OS, FileName](StringRef L) {
+  auto print = [&OS, FileName](unsigned Offset, StringRef L) {
     if (L.size() < static_cast<size_t>(MinLength))
       return;
     if (PrintFileName)
-      OS << FileName << ": ";
-    OS << L << '\n';
+      OS << FileName << ":";
+    switch (Radix) {
+    default:
+    case none:
+      break;
+    case octal:
+      OS << format("%8o", Offset);
+      break;
+    case hexadecimal:
+      OS << format("%8x", Offset);
+      break;
+    case decimal:
+      OS << format("%8u", Offset);
+      break;
+    }
+    OS << " " << L << '\n';
   };
 
+  const char *B = Contents.begin();
   const char *P = nullptr, *E = nullptr, *S = nullptr;
   for (P = Contents.begin(), E = Contents.end(); P < E; ++P) {
     if (std::isgraph(*P) || std::isblank(*P)) {
       if (S == nullptr)
         S = P;
     } else if (S) {
-      print(StringRef(S, P - S));
+      print(S - B, StringRef(S, P - S));
       S = nullptr;
     }
   }
   if (S)
-    print(StringRef(S, E - S));
+    print(S - B, StringRef(S, E - S));
 }
 
 int main(int argc, char **argv) {




More information about the llvm-commits mailing list