[llvm] [z/OS] Add z/OS archive reading support (PR #187110)

Uyiosa Iyekekpolor via llvm-commits llvm-commits at lists.llvm.org
Wed May 6 19:25:21 PDT 2026


================
@@ -368,6 +377,122 @@ Expected<uint64_t> BigArchiveMemberHeader::getSize() const {
   return *SizeOrErr + alignTo(*NameLenOrErr, 2);
 }
 
+template <std::size_t N>
+StringRef ebcdicFieldToASCII(const char (&Field)[N],
+                             SmallVectorImpl<char> &Dst) {
+  Dst.clear();
+  StringRef Src = StringRef(Field, N);
+  ConverterEBCDIC::convertToUTF8(Src, Dst);
+  return StringRef(Dst.data(), Dst.size()).rtrim(" ");
+}
+
+ZOSArchiveMemberHeader::ZOSArchiveMemberHeader(const Archive *Parent,
+                                               const char *RawHeaderPtr,
+                                               uint64_t Size, Error *Err)
+    : ArchiveMemberHeader(Parent, RawHeaderPtr, Size, Err) {
+  ErrorAsOutParameter ErrAsOutParam(Err);
+  setMemberHeaderStrings(Err, Size);
+}
+
+Expected<uint64_t> ZOSArchiveMemberHeader::getSize() const {
+  SmallString<64> Dst;
+  return getArchiveMemberDecField(
+      "size", ebcdicFieldToASCII(ArMemHdr->Size, Dst), Parent, this);
+}
+
+Expected<StringRef> ZOSArchiveMemberHeader::getRawName() const {
+  return StringRef(RawMemberName);
+}
+
+Expected<StringRef> ZOSArchiveMemberHeader::getName(uint64_t Size) const {
----------------
uyoyo0 wrote:

Done, thanks

https://github.com/llvm/llvm-project/pull/187110


More information about the llvm-commits mailing list