forked from OSchip/llvm-project
llvm-strings: support printing the filename
This adds support for the `-f` or `--print-file-name` option for strings. llvm-svn: 286767
This commit is contained in:
parent
dc45274d54
commit
8b9be8fd41
|
@ -0,0 +1,9 @@
|
|||
RUN: echo -n abcd > %T/abcd
|
||||
RUN: llvm-ar -format gnu crs %T/archive.a %T/abcd
|
||||
RUN: llvm-strings -f %T/archive.a | FileCheck %s
|
||||
RUN: llvm-strings --print-file-name %T/archive.a | FileCheck %s
|
||||
|
||||
CHECK: archive.a: !<arch>
|
||||
CHECK: archive.a: abcd/ 0 0 0 644 4 `
|
||||
CHECK: archive.a: abcd
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
RUN: echo -n abcd > %T/abcd
|
||||
RUN: llvm-strings -f %T/abcd | FileCheck %s
|
||||
RUN: llvm-strings --print-file-name %T/abcd | FileCheck %s
|
||||
CHECK: {{[\\/]}}abcd: abcd
|
|
@ -0,0 +1,3 @@
|
|||
RUN: echo -n abcd | llvm-strings -f - | FileCheck %s
|
||||
RUN: echo -n abcd | llvm-strings --print-file-name - | FileCheck %s
|
||||
CHECK: {standard input}: abcd
|
|
@ -29,7 +29,19 @@ static cl::list<std::string> InputFileNames(cl::Positional,
|
|||
cl::desc("<input object files>"),
|
||||
cl::ZeroOrMore);
|
||||
|
||||
static void strings(raw_ostream &OS, StringRef Contents) {
|
||||
static cl::opt<bool>
|
||||
PrintFileName("print-file-name",
|
||||
cl::desc("Print the name of the file before each string"));
|
||||
static cl::alias PrintFileNameShort("f", cl::desc(""),
|
||||
cl::aliasopt(PrintFileName));
|
||||
|
||||
static void strings(raw_ostream &OS, StringRef FileName, StringRef Contents) {
|
||||
auto print = [&OS, FileName](StringRef L) {
|
||||
if (PrintFileName)
|
||||
OS << FileName << ": ";
|
||||
OS << L << '\n';
|
||||
};
|
||||
|
||||
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)) {
|
||||
|
@ -37,12 +49,12 @@ static void strings(raw_ostream &OS, StringRef Contents) {
|
|||
S = P;
|
||||
} else if (S) {
|
||||
if (P - S > 3)
|
||||
OS << StringRef(S, P - S) << '\n';
|
||||
print(StringRef(S, P - S));
|
||||
S = nullptr;
|
||||
}
|
||||
}
|
||||
if (S && E - S > 3)
|
||||
OS << StringRef(S, E - S) << '\n';
|
||||
print(StringRef(S, E - S));
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
|
@ -60,7 +72,8 @@ int main(int argc, char **argv) {
|
|||
if (std::error_code EC = Buffer.getError())
|
||||
errs() << File << ": " << EC.message() << '\n';
|
||||
else
|
||||
strings(llvm::outs(), Buffer.get()->getMemBufferRef().getBuffer());
|
||||
strings(llvm::outs(), File == "-" ? "{standard input}" : File,
|
||||
Buffer.get()->getMemBufferRef().getBuffer());
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
|
|
Loading…
Reference in New Issue