forked from OSchip/llvm-project
[NFC][libObject] clang-format Archive{.h,.cpp}
In preparation for D100651
This commit is contained in:
parent
57646d38d5
commit
e41aaea262
|
@ -54,17 +54,15 @@ public:
|
||||||
Expected<sys::TimePoint<std::chrono::seconds>> getLastModified() const;
|
Expected<sys::TimePoint<std::chrono::seconds>> getLastModified() const;
|
||||||
|
|
||||||
StringRef getRawLastModified() const {
|
StringRef getRawLastModified() const {
|
||||||
return StringRef(ArMemHdr->LastModified,
|
return StringRef(ArMemHdr->LastModified, sizeof(ArMemHdr->LastModified))
|
||||||
sizeof(ArMemHdr->LastModified)).rtrim(' ');
|
.rtrim(' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
Expected<unsigned> getUID() const;
|
Expected<unsigned> getUID() const;
|
||||||
Expected<unsigned> getGID() const;
|
Expected<unsigned> getGID() const;
|
||||||
|
|
||||||
// This returns the size of the private struct ArMemHdrType
|
// This returns the size of the private struct ArMemHdrType
|
||||||
uint64_t getSizeOf() const {
|
uint64_t getSizeOf() const { return sizeof(ArMemHdrType); }
|
||||||
return sizeof(ArMemHdrType);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct ArMemHdrType {
|
struct ArMemHdrType {
|
||||||
|
@ -101,7 +99,7 @@ public:
|
||||||
Child(const Archive *Parent, const char *Start, Error *Err);
|
Child(const Archive *Parent, const char *Start, Error *Err);
|
||||||
Child(const Archive *Parent, StringRef Data, uint16_t StartOfFile);
|
Child(const Archive *Parent, StringRef Data, uint16_t StartOfFile);
|
||||||
|
|
||||||
bool operator ==(const Child &other) const {
|
bool operator==(const Child &other) const {
|
||||||
assert(!Parent || !other.Parent || Parent == other.Parent);
|
assert(!Parent || !other.Parent || Parent == other.Parent);
|
||||||
return Data.begin() == other.Data.begin();
|
return Data.begin() == other.Data.begin();
|
||||||
}
|
}
|
||||||
|
@ -117,9 +115,7 @@ public:
|
||||||
return Header.getLastModified();
|
return Header.getLastModified();
|
||||||
}
|
}
|
||||||
|
|
||||||
StringRef getRawLastModified() const {
|
StringRef getRawLastModified() const { return Header.getRawLastModified(); }
|
||||||
return Header.getRawLastModified();
|
|
||||||
}
|
|
||||||
|
|
||||||
Expected<unsigned> getUID() const { return Header.getUID(); }
|
Expected<unsigned> getUID() const { return Header.getUID(); }
|
||||||
Expected<unsigned> getGID() const { return Header.getGID(); }
|
Expected<unsigned> getGID() const { return Header.getGID(); }
|
||||||
|
@ -182,11 +178,9 @@ public:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Symbol(const Archive *p, uint32_t symi, uint32_t stri)
|
Symbol(const Archive *p, uint32_t symi, uint32_t stri)
|
||||||
: Parent(p)
|
: Parent(p), SymbolIndex(symi), StringIndex(stri) {}
|
||||||
, SymbolIndex(symi)
|
|
||||||
, StringIndex(stri) {}
|
|
||||||
|
|
||||||
bool operator ==(const Symbol &other) const {
|
bool operator==(const Symbol &other) const {
|
||||||
return (Parent == other.Parent) && (SymbolIndex == other.SymbolIndex);
|
return (Parent == other.Parent) && (SymbolIndex == other.SymbolIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,7 +206,7 @@ public:
|
||||||
return !(*this == other);
|
return !(*this == other);
|
||||||
}
|
}
|
||||||
|
|
||||||
symbol_iterator& operator++() { // Preincrement
|
symbol_iterator &operator++() { // Preincrement
|
||||||
symbol = symbol.getNext();
|
symbol = symbol.getNext();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
@ -224,14 +218,7 @@ public:
|
||||||
/// Size field is 10 decimal digits long
|
/// Size field is 10 decimal digits long
|
||||||
static const uint64_t MaxMemberSize = 9999999999;
|
static const uint64_t MaxMemberSize = 9999999999;
|
||||||
|
|
||||||
enum Kind {
|
enum Kind { K_GNU, K_GNU64, K_BSD, K_DARWIN, K_DARWIN64, K_COFF };
|
||||||
K_GNU,
|
|
||||||
K_GNU64,
|
|
||||||
K_BSD,
|
|
||||||
K_DARWIN,
|
|
||||||
K_DARWIN64,
|
|
||||||
K_COFF
|
|
||||||
};
|
|
||||||
|
|
||||||
Kind kind() const { return (Kind)Format; }
|
Kind kind() const { return (Kind)Format; }
|
||||||
bool isThin() const { return IsThin; }
|
bool isThin() const { return IsThin; }
|
||||||
|
@ -250,9 +237,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cast methods.
|
// Cast methods.
|
||||||
static bool classof(Binary const *v) {
|
static bool classof(Binary const *v) { return v->isArchive(); }
|
||||||
return v->isArchive();
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if a symbol is in the archive
|
// check if a symbol is in the archive
|
||||||
Expected<Optional<Child>> findSym(StringRef name) const;
|
Expected<Optional<Child>> findSym(StringRef name) const;
|
||||||
|
|
|
@ -43,8 +43,7 @@ const char ThinMagic[] = "!<thin>\n";
|
||||||
|
|
||||||
void Archive::anchor() {}
|
void Archive::anchor() {}
|
||||||
|
|
||||||
static Error
|
static Error malformedError(Twine Msg) {
|
||||||
malformedError(Twine Msg) {
|
|
||||||
std::string StringMsg = "truncated or malformed archive (" + Msg.str() + ")";
|
std::string StringMsg = "truncated or malformed archive (" + Msg.str() + ")";
|
||||||
return make_error<GenericBinaryError>(std::move(StringMsg),
|
return make_error<GenericBinaryError>(std::move(StringMsg),
|
||||||
object_error::parse_failed);
|
object_error::parse_failed);
|
||||||
|
@ -77,8 +76,8 @@ ArchiveMemberHeader::ArchiveMemberHeader(const Archive *Parent,
|
||||||
if (Err) {
|
if (Err) {
|
||||||
std::string Buf;
|
std::string Buf;
|
||||||
raw_string_ostream OS(Buf);
|
raw_string_ostream OS(Buf);
|
||||||
OS.write_escaped(StringRef(ArMemHdr->Terminator,
|
OS.write_escaped(
|
||||||
sizeof(ArMemHdr->Terminator)));
|
StringRef(ArMemHdr->Terminator, sizeof(ArMemHdr->Terminator)));
|
||||||
OS.flush();
|
OS.flush();
|
||||||
std::string Msg("terminator characters in archive member \"" + Buf +
|
std::string Msg("terminator characters in archive member \"" + Buf +
|
||||||
"\" not the correct \"`\\n\" values for the archive "
|
"\" not the correct \"`\\n\" values for the archive "
|
||||||
|
@ -102,14 +101,14 @@ Expected<StringRef> ArchiveMemberHeader::getRawName() const {
|
||||||
auto Kind = Parent->kind();
|
auto Kind = Parent->kind();
|
||||||
if (Kind == Archive::K_BSD || Kind == Archive::K_DARWIN64) {
|
if (Kind == Archive::K_BSD || Kind == Archive::K_DARWIN64) {
|
||||||
if (ArMemHdr->Name[0] == ' ') {
|
if (ArMemHdr->Name[0] == ' ') {
|
||||||
uint64_t Offset = reinterpret_cast<const char *>(ArMemHdr) -
|
uint64_t Offset =
|
||||||
Parent->getData().data();
|
reinterpret_cast<const char *>(ArMemHdr) - Parent->getData().data();
|
||||||
return malformedError("name contains a leading space for archive member "
|
return malformedError("name contains a leading space for archive member "
|
||||||
"header at offset " + Twine(Offset));
|
"header at offset " +
|
||||||
|
Twine(Offset));
|
||||||
}
|
}
|
||||||
EndCond = ' ';
|
EndCond = ' ';
|
||||||
}
|
} else if (ArMemHdr->Name[0] == '/' || ArMemHdr->Name[0] == '#')
|
||||||
else if (ArMemHdr->Name[0] == '/' || ArMemHdr->Name[0] == '#')
|
|
||||||
EndCond = ' ';
|
EndCond = ' ';
|
||||||
else
|
else
|
||||||
EndCond = '/';
|
EndCond = '/';
|
||||||
|
@ -131,8 +130,8 @@ Expected<StringRef> ArchiveMemberHeader::getName(uint64_t Size) const {
|
||||||
// archive header is truncated to produce an error message with the name.
|
// archive header is truncated to produce an error message with the name.
|
||||||
// Make sure the name field is not truncated.
|
// Make sure the name field is not truncated.
|
||||||
if (Size < offsetof(ArMemHdrType, Name) + sizeof(ArMemHdr->Name)) {
|
if (Size < offsetof(ArMemHdrType, Name) + sizeof(ArMemHdr->Name)) {
|
||||||
uint64_t ArchiveOffset = reinterpret_cast<const char *>(ArMemHdr) -
|
uint64_t ArchiveOffset =
|
||||||
Parent->getData().data();
|
reinterpret_cast<const char *>(ArMemHdr) - Parent->getData().data();
|
||||||
return malformedError("archive header truncated before the name field "
|
return malformedError("archive header truncated before the name field "
|
||||||
"for archive member header at offset " +
|
"for archive member header at offset " +
|
||||||
Twine(ArchiveOffset));
|
Twine(ArchiveOffset));
|
||||||
|
@ -158,21 +157,22 @@ Expected<StringRef> ArchiveMemberHeader::getName(uint64_t Size) const {
|
||||||
raw_string_ostream OS(Buf);
|
raw_string_ostream OS(Buf);
|
||||||
OS.write_escaped(Name.substr(1).rtrim(' '));
|
OS.write_escaped(Name.substr(1).rtrim(' '));
|
||||||
OS.flush();
|
OS.flush();
|
||||||
uint64_t ArchiveOffset = reinterpret_cast<const char *>(ArMemHdr) -
|
uint64_t ArchiveOffset =
|
||||||
Parent->getData().data();
|
reinterpret_cast<const char *>(ArMemHdr) - Parent->getData().data();
|
||||||
return malformedError("long name offset characters after the '/' are "
|
return malformedError("long name offset characters after the '/' are "
|
||||||
"not all decimal numbers: '" + Buf + "' for "
|
"not all decimal numbers: '" +
|
||||||
"archive member header at offset " +
|
Buf + "' for archive member header at offset " +
|
||||||
Twine(ArchiveOffset));
|
Twine(ArchiveOffset));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify it.
|
// Verify it.
|
||||||
if (StringOffset >= Parent->getStringTable().size()) {
|
if (StringOffset >= Parent->getStringTable().size()) {
|
||||||
uint64_t ArchiveOffset = reinterpret_cast<const char *>(ArMemHdr) -
|
uint64_t ArchiveOffset =
|
||||||
Parent->getData().data();
|
reinterpret_cast<const char *>(ArMemHdr) - Parent->getData().data();
|
||||||
return malformedError("long name offset " + Twine(StringOffset) + " past "
|
return malformedError("long name offset " + Twine(StringOffset) +
|
||||||
"the end of the string table for archive member "
|
" past the end of the string table for archive "
|
||||||
"header at offset " + Twine(ArchiveOffset));
|
"member header at offset " +
|
||||||
|
Twine(ArchiveOffset));
|
||||||
}
|
}
|
||||||
|
|
||||||
// GNU long file names end with a "/\n".
|
// GNU long file names end with a "/\n".
|
||||||
|
@ -196,23 +196,24 @@ Expected<StringRef> ArchiveMemberHeader::getName(uint64_t Size) const {
|
||||||
raw_string_ostream OS(Buf);
|
raw_string_ostream OS(Buf);
|
||||||
OS.write_escaped(Name.substr(3).rtrim(' '));
|
OS.write_escaped(Name.substr(3).rtrim(' '));
|
||||||
OS.flush();
|
OS.flush();
|
||||||
uint64_t ArchiveOffset = reinterpret_cast<const char *>(ArMemHdr) -
|
uint64_t ArchiveOffset =
|
||||||
Parent->getData().data();
|
reinterpret_cast<const char *>(ArMemHdr) - Parent->getData().data();
|
||||||
return malformedError("long name length characters after the #1/ are "
|
return malformedError("long name length characters after the #1/ are "
|
||||||
"not all decimal numbers: '" + Buf + "' for "
|
"not all decimal numbers: '" +
|
||||||
"archive member header at offset " +
|
Buf + "' for archive member header at offset " +
|
||||||
Twine(ArchiveOffset));
|
Twine(ArchiveOffset));
|
||||||
}
|
}
|
||||||
if (getSizeOf() + NameLength > Size) {
|
if (getSizeOf() + NameLength > Size) {
|
||||||
uint64_t ArchiveOffset = reinterpret_cast<const char *>(ArMemHdr) -
|
uint64_t ArchiveOffset =
|
||||||
Parent->getData().data();
|
reinterpret_cast<const char *>(ArMemHdr) - Parent->getData().data();
|
||||||
return malformedError("long name length: " + Twine(NameLength) +
|
return malformedError("long name length: " + Twine(NameLength) +
|
||||||
" extends past the end of the member or archive "
|
" extends past the end of the member or archive "
|
||||||
"for archive member header at offset " +
|
"for archive member header at offset " +
|
||||||
Twine(ArchiveOffset));
|
Twine(ArchiveOffset));
|
||||||
}
|
}
|
||||||
return StringRef(reinterpret_cast<const char *>(ArMemHdr) + getSizeOf(),
|
return StringRef(reinterpret_cast<const char *>(ArMemHdr) + getSizeOf(),
|
||||||
NameLength).rtrim('\0');
|
NameLength)
|
||||||
|
.rtrim('\0');
|
||||||
}
|
}
|
||||||
|
|
||||||
// It is not a long name so trim the blanks at the end of the name.
|
// It is not a long name so trim the blanks at the end of the name.
|
||||||
|
@ -225,36 +226,43 @@ Expected<StringRef> ArchiveMemberHeader::getName(uint64_t Size) const {
|
||||||
|
|
||||||
Expected<uint64_t> ArchiveMemberHeader::getSize() const {
|
Expected<uint64_t> ArchiveMemberHeader::getSize() const {
|
||||||
uint64_t Ret;
|
uint64_t Ret;
|
||||||
if (StringRef(ArMemHdr->Size,
|
if (StringRef(ArMemHdr->Size, sizeof(ArMemHdr->Size))
|
||||||
sizeof(ArMemHdr->Size)).rtrim(" ").getAsInteger(10, Ret)) {
|
.rtrim(" ")
|
||||||
|
.getAsInteger(10, Ret)) {
|
||||||
std::string Buf;
|
std::string Buf;
|
||||||
raw_string_ostream OS(Buf);
|
raw_string_ostream OS(Buf);
|
||||||
OS.write_escaped(StringRef(ArMemHdr->Size,
|
OS.write_escaped(
|
||||||
sizeof(ArMemHdr->Size)).rtrim(" "));
|
StringRef(ArMemHdr->Size, sizeof(ArMemHdr->Size)).rtrim(" "));
|
||||||
OS.flush();
|
OS.flush();
|
||||||
uint64_t Offset = reinterpret_cast<const char *>(ArMemHdr) -
|
uint64_t Offset =
|
||||||
Parent->getData().data();
|
reinterpret_cast<const char *>(ArMemHdr) - Parent->getData().data();
|
||||||
return malformedError("characters in size field in archive header are not "
|
return malformedError("characters in size field in archive header are not "
|
||||||
"all decimal numbers: '" + Buf + "' for archive "
|
"all decimal numbers: '" +
|
||||||
"member header at offset " + Twine(Offset));
|
Buf +
|
||||||
|
"' for archive "
|
||||||
|
"member header at offset " +
|
||||||
|
Twine(Offset));
|
||||||
}
|
}
|
||||||
return Ret;
|
return Ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
Expected<sys::fs::perms> ArchiveMemberHeader::getAccessMode() const {
|
Expected<sys::fs::perms> ArchiveMemberHeader::getAccessMode() const {
|
||||||
unsigned Ret;
|
unsigned Ret;
|
||||||
if (StringRef(ArMemHdr->AccessMode,
|
if (StringRef(ArMemHdr->AccessMode, sizeof(ArMemHdr->AccessMode))
|
||||||
sizeof(ArMemHdr->AccessMode)).rtrim(' ').getAsInteger(8, Ret)) {
|
.rtrim(' ')
|
||||||
|
.getAsInteger(8, Ret)) {
|
||||||
std::string Buf;
|
std::string Buf;
|
||||||
raw_string_ostream OS(Buf);
|
raw_string_ostream OS(Buf);
|
||||||
OS.write_escaped(StringRef(ArMemHdr->AccessMode,
|
OS.write_escaped(
|
||||||
sizeof(ArMemHdr->AccessMode)).rtrim(" "));
|
StringRef(ArMemHdr->AccessMode, sizeof(ArMemHdr->AccessMode))
|
||||||
|
.rtrim(" "));
|
||||||
OS.flush();
|
OS.flush();
|
||||||
uint64_t Offset = reinterpret_cast<const char *>(ArMemHdr) -
|
uint64_t Offset =
|
||||||
Parent->getData().data();
|
reinterpret_cast<const char *>(ArMemHdr) - Parent->getData().data();
|
||||||
return malformedError("characters in AccessMode field in archive header "
|
return malformedError("characters in AccessMode field in archive header "
|
||||||
"are not all decimal numbers: '" + Buf + "' for the "
|
"are not all decimal numbers: '" +
|
||||||
"archive member header at offset " + Twine(Offset));
|
Buf + "' for the archive member header at offset " +
|
||||||
|
Twine(Offset));
|
||||||
}
|
}
|
||||||
return static_cast<sys::fs::perms>(Ret);
|
return static_cast<sys::fs::perms>(Ret);
|
||||||
}
|
}
|
||||||
|
@ -262,19 +270,21 @@ Expected<sys::fs::perms> ArchiveMemberHeader::getAccessMode() const {
|
||||||
Expected<sys::TimePoint<std::chrono::seconds>>
|
Expected<sys::TimePoint<std::chrono::seconds>>
|
||||||
ArchiveMemberHeader::getLastModified() const {
|
ArchiveMemberHeader::getLastModified() const {
|
||||||
unsigned Seconds;
|
unsigned Seconds;
|
||||||
if (StringRef(ArMemHdr->LastModified,
|
if (StringRef(ArMemHdr->LastModified, sizeof(ArMemHdr->LastModified))
|
||||||
sizeof(ArMemHdr->LastModified)).rtrim(' ')
|
.rtrim(' ')
|
||||||
.getAsInteger(10, Seconds)) {
|
.getAsInteger(10, Seconds)) {
|
||||||
std::string Buf;
|
std::string Buf;
|
||||||
raw_string_ostream OS(Buf);
|
raw_string_ostream OS(Buf);
|
||||||
OS.write_escaped(StringRef(ArMemHdr->LastModified,
|
OS.write_escaped(
|
||||||
sizeof(ArMemHdr->LastModified)).rtrim(" "));
|
StringRef(ArMemHdr->LastModified, sizeof(ArMemHdr->LastModified))
|
||||||
|
.rtrim(" "));
|
||||||
OS.flush();
|
OS.flush();
|
||||||
uint64_t Offset = reinterpret_cast<const char *>(ArMemHdr) -
|
uint64_t Offset =
|
||||||
Parent->getData().data();
|
reinterpret_cast<const char *>(ArMemHdr) - Parent->getData().data();
|
||||||
return malformedError("characters in LastModified field in archive header "
|
return malformedError("characters in LastModified field in archive header "
|
||||||
"are not all decimal numbers: '" + Buf + "' for the "
|
"are not all decimal numbers: '" +
|
||||||
"archive member header at offset " + Twine(Offset));
|
Buf + "' for the archive member header at offset " +
|
||||||
|
Twine(Offset));
|
||||||
}
|
}
|
||||||
|
|
||||||
return sys::toTimePoint(Seconds);
|
return sys::toTimePoint(Seconds);
|
||||||
|
@ -290,11 +300,12 @@ Expected<unsigned> ArchiveMemberHeader::getUID() const {
|
||||||
raw_string_ostream OS(Buf);
|
raw_string_ostream OS(Buf);
|
||||||
OS.write_escaped(User);
|
OS.write_escaped(User);
|
||||||
OS.flush();
|
OS.flush();
|
||||||
uint64_t Offset = reinterpret_cast<const char *>(ArMemHdr) -
|
uint64_t Offset =
|
||||||
Parent->getData().data();
|
reinterpret_cast<const char *>(ArMemHdr) - Parent->getData().data();
|
||||||
return malformedError("characters in UID field in archive header "
|
return malformedError("characters in UID field in archive header "
|
||||||
"are not all decimal numbers: '" + Buf + "' for the "
|
"are not all decimal numbers: '" +
|
||||||
"archive member header at offset " + Twine(Offset));
|
Buf + "' for the archive member header at offset " +
|
||||||
|
Twine(Offset));
|
||||||
}
|
}
|
||||||
return Ret;
|
return Ret;
|
||||||
}
|
}
|
||||||
|
@ -309,11 +320,12 @@ Expected<unsigned> ArchiveMemberHeader::getGID() const {
|
||||||
raw_string_ostream OS(Buf);
|
raw_string_ostream OS(Buf);
|
||||||
OS.write_escaped(Group);
|
OS.write_escaped(Group);
|
||||||
OS.flush();
|
OS.flush();
|
||||||
uint64_t Offset = reinterpret_cast<const char *>(ArMemHdr) -
|
uint64_t Offset =
|
||||||
Parent->getData().data();
|
reinterpret_cast<const char *>(ArMemHdr) - Parent->getData().data();
|
||||||
return malformedError("characters in GID field in archive header "
|
return malformedError("characters in GID field in archive header "
|
||||||
"are not all decimal numbers: '" + Buf + "' for the "
|
"are not all decimal numbers: '" +
|
||||||
"archive member header at offset " + Twine(Offset));
|
Buf + "' for the archive member header at offset " +
|
||||||
|
Twine(Offset));
|
||||||
}
|
}
|
||||||
return Ret;
|
return Ret;
|
||||||
}
|
}
|
||||||
|
@ -321,15 +333,15 @@ Expected<unsigned> ArchiveMemberHeader::getGID() const {
|
||||||
Archive::Child::Child(const Archive *Parent, StringRef Data,
|
Archive::Child::Child(const Archive *Parent, StringRef Data,
|
||||||
uint16_t StartOfFile)
|
uint16_t StartOfFile)
|
||||||
: Parent(Parent), Header(Parent, Data.data(), Data.size(), nullptr),
|
: Parent(Parent), Header(Parent, Data.data(), Data.size(), nullptr),
|
||||||
Data(Data), StartOfFile(StartOfFile) {
|
Data(Data), StartOfFile(StartOfFile) {}
|
||||||
}
|
|
||||||
|
|
||||||
Archive::Child::Child(const Archive *Parent, const char *Start, Error *Err)
|
Archive::Child::Child(const Archive *Parent, const char *Start, Error *Err)
|
||||||
: Parent(Parent),
|
: Parent(Parent),
|
||||||
Header(Parent, Start,
|
Header(Parent, Start,
|
||||||
Parent
|
Parent
|
||||||
? Parent->getData().size() - (Start - Parent->getData().data())
|
? Parent->getData().size() - (Start - Parent->getData().data())
|
||||||
: 0, Err) {
|
: 0,
|
||||||
|
Err) {
|
||||||
if (!Start)
|
if (!Start)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -368,7 +380,7 @@ Archive::Child::Child(const Archive *Parent, const char *Start, Error *Err)
|
||||||
StartOfFile = Header.getSizeOf();
|
StartOfFile = Header.getSizeOf();
|
||||||
// Don't include attached name.
|
// Don't include attached name.
|
||||||
Expected<StringRef> NameOrErr = getRawName();
|
Expected<StringRef> NameOrErr = getRawName();
|
||||||
if (!NameOrErr){
|
if (!NameOrErr) {
|
||||||
*Err = NameOrErr.takeError();
|
*Err = NameOrErr.takeError();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -382,8 +394,8 @@ Archive::Child::Child(const Archive *Parent, const char *Start, Error *Err)
|
||||||
OS.flush();
|
OS.flush();
|
||||||
uint64_t Offset = Start - Parent->getData().data();
|
uint64_t Offset = Start - Parent->getData().data();
|
||||||
*Err = malformedError("long name length characters after the #1/ are "
|
*Err = malformedError("long name length characters after the #1/ are "
|
||||||
"not all decimal numbers: '" + Buf + "' for "
|
"not all decimal numbers: '" +
|
||||||
"archive member header at offset " +
|
Buf + "' for archive member header at offset " +
|
||||||
Twine(Offset));
|
Twine(Offset));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -646,8 +658,7 @@ Archive::Archive(MemoryBufferRef Source, Error &Err)
|
||||||
SymbolTable = BufOrErr.get();
|
SymbolTable = BufOrErr.get();
|
||||||
if (Increment())
|
if (Increment())
|
||||||
return;
|
return;
|
||||||
}
|
} else if (Name == "__.SYMDEF_64 SORTED" || Name == "__.SYMDEF_64") {
|
||||||
else if (Name == "__.SYMDEF_64 SORTED" || Name == "__.SYMDEF_64") {
|
|
||||||
Format = K_DARWIN64;
|
Format = K_DARWIN64;
|
||||||
// We know that the symbol table is not an external file, but we still
|
// We know that the symbol table is not an external file, but we still
|
||||||
// must check any Expected<> return value.
|
// must check any Expected<> return value.
|
||||||
|
|
Loading…
Reference in New Issue