review: account for endianness on non-copy values
This commit is contained in:
parent
a3229ee009
commit
7ca8df7351
@ -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());
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user