review: account for endianness on non-copy values

This commit is contained in:
Finn Plummer 2025-08-11 22:23:40 +00:00
parent a3229ee009
commit 7ca8df7351

View File

@ -28,14 +28,22 @@ Error DXContainerWriter::write() {
size_t TotalSize = finalize();
Out.reserveExtraSpace(TotalSize);
Out.write(reinterpret_cast<const char *>(&Obj.Header),
llvm::dxbc::Header Header = Obj.Header;
if (sys::IsBigEndianHost)
Header.swapBytes();
Out.write(reinterpret_cast<const char *>(&Header),
sizeof(::llvm::dxbc::Header));
if (sys::IsBigEndianHost)
for (auto &O : Offsets)
sys::swapByteOrder(O);
Out.write(reinterpret_cast<const char *>(Offsets.data()),
Offsets.size() * sizeof(uint32_t));
for (const Part &P : Obj.Parts) {
Out.write(reinterpret_cast<const char *>(P.Name.data()), P.Name.size());
Out.write(reinterpret_cast<const char *>(P.Name.data()), 4);
uint32_t Size = P.Data.size();
if (sys::IsBigEndianHost)
sys::swapByteOrder(Size);
Out.write(reinterpret_cast<const char *>(&Size), sizeof(uint32_t));
Out.write(reinterpret_cast<const char *>(P.Data.data()), P.Data.size());
}