From 4a0bf5423c2dc7eb8ae197447b4b61e6517f108a Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Fri, 5 Jul 2013 03:35:15 +0000 Subject: [PATCH] Use the raw member names in Archive::Archive. This a bit more efficient and avoids having a function that uses the string table being called by a function that searches for it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185680 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Object/Archive.h | 1 + lib/Object/Archive.cpp | 25 ++++++++++--------------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/include/llvm/Object/Archive.h b/include/llvm/Object/Archive.h index e2478f6754b..7a818a10d83 100644 --- a/include/llvm/Object/Archive.h +++ b/include/llvm/Object/Archive.h @@ -114,6 +114,7 @@ public: } error_code getName(StringRef &Result) const; + StringRef getRawName() const { return ToHeader(Data.data())->getName(); } int getLastModified() const; int getUID() const; int getGID() const; diff --git a/lib/Object/Archive.cpp b/lib/Object/Archive.cpp index 0b819f4c806..27676cf454a 100644 --- a/lib/Object/Archive.cpp +++ b/lib/Object/Archive.cpp @@ -38,7 +38,7 @@ static bool isInternalMember(const ArchiveMemberHeader &amh) { void Archive::anchor() { } error_code Archive::Child::getName(StringRef &Result) const { - StringRef name = ToHeader(Data.data())->getName(); + StringRef name = getRawName(); // Check if it's a special name. if (name[0] == '/') { if (name.size() == 1) { // Linker member. @@ -119,10 +119,7 @@ Archive::Archive(MemoryBuffer *source, error_code &ec) return; } - // FIXME: this function should be able to use raw names. - StringRef name; - if ((ec = i->getName(name))) - return; + StringRef Name = i->getRawName(); // Below is the pattern that is used to figure out the archive format // GNU archive format @@ -143,14 +140,14 @@ Archive::Archive(MemoryBuffer *source, error_code &ec) // seem to create the third member if there's no member whose filename // exceeds 15 characters. So the third member is optional. - if (name == "__.SYMDEF") { + if (Name == "__.SYMDEF") { Format = K_BSD; SymbolTable = i; ec = object_error::success; return; } - if (name == "/") { + if (Name == "/") { SymbolTable = i; ++i; @@ -158,24 +155,23 @@ Archive::Archive(MemoryBuffer *source, error_code &ec) ec = object_error::parse_failed; return; } - if ((ec = i->getName(name))) - return; + Name = i->getRawName(); } - if (name == "//") { + if (Name == "//") { Format = K_GNU; StringTable = i; ec = object_error::success; return; } - if (name[0] != '/') { + if (Name[0] != '/') { Format = K_GNU; ec = object_error::success; return; } - if (name != "/") { + if (Name != "/") { ec = object_error::parse_failed; return; } @@ -189,10 +185,9 @@ Archive::Archive(MemoryBuffer *source, error_code &ec) return; } - if ((ec = i->getName(name))) - return; + Name = i->getRawName(); - if (name == "//") + if (Name == "//") StringTable = i; ec = object_error::success; -- 2.11.0