forked from OSchip/llvm-project
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. llvm-svn: 286914
This commit is contained in:
parent
81da114e65
commit
f7009b42f8
|
@ -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
|
||||
|
|
@ -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("-");
|
||||
|
|
Loading…
Reference in New Issue