[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