summaryrefslogtreecommitdiff
path: root/include/llvm/Object/ArchiveWriter.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/Object/ArchiveWriter.h')
-rw-r--r--include/llvm/Object/ArchiveWriter.h45
1 files changed, 26 insertions, 19 deletions
diff --git a/include/llvm/Object/ArchiveWriter.h b/include/llvm/Object/ArchiveWriter.h
index b5d2ba3580809..55b58fac4f66b 100644
--- a/include/llvm/Object/ArchiveWriter.h
+++ b/include/llvm/Object/ArchiveWriter.h
@@ -20,29 +20,36 @@
namespace llvm {
-class NewArchiveIterator {
- bool IsNewMember;
- StringRef Name;
-
- object::Archive::Child OldMember;
-
-public:
- NewArchiveIterator(const object::Archive::Child &OldMember, StringRef Name);
- NewArchiveIterator(StringRef FileName);
- bool isNewMember() const;
- StringRef getName() const;
-
- const object::Archive::Child &getOld() const;
-
- StringRef getNew() const;
- llvm::ErrorOr<int> getFD(sys::fs::file_status &NewStatus) const;
- const sys::fs::file_status &getStatus() const;
+struct NewArchiveMember {
+ std::unique_ptr<MemoryBuffer> Buf;
+ sys::TimeValue ModTime = sys::TimeValue::PosixZeroTime();
+ unsigned UID = 0, GID = 0, Perms = 0644;
+
+ NewArchiveMember() = default;
+ NewArchiveMember(NewArchiveMember &&Other)
+ : Buf(std::move(Other.Buf)), ModTime(Other.ModTime), UID(Other.UID),
+ GID(Other.GID), Perms(Other.Perms) {}
+ NewArchiveMember &operator=(NewArchiveMember &&Other) {
+ Buf = std::move(Other.Buf);
+ ModTime = Other.ModTime;
+ UID = Other.UID;
+ GID = Other.GID;
+ Perms = Other.Perms;
+ return *this;
+ }
+ NewArchiveMember(MemoryBufferRef BufRef);
+
+ static Expected<NewArchiveMember>
+ getOldMember(const object::Archive::Child &OldMember, bool Deterministic);
+
+ static Expected<NewArchiveMember> getFile(StringRef FileName,
+ bool Deterministic);
};
std::pair<StringRef, std::error_code>
-writeArchive(StringRef ArcName, std::vector<NewArchiveIterator> &NewMembers,
+writeArchive(StringRef ArcName, std::vector<NewArchiveMember> &NewMembers,
bool WriteSymtab, object::Archive::Kind Kind, bool Deterministic,
- bool Thin);
+ bool Thin, std::unique_ptr<MemoryBuffer> OldArchiveBuf = nullptr);
}
#endif