17llvm::Expected<Chunk>
readChunk(llvm::StringRef &Stream) {
18 if (Stream.size() < 8)
19 return error(
"incomplete chunk header: {0} bytes available", Stream.size());
21 std::copy(Stream.begin(), Stream.begin() + 4, C.ID.begin());
22 Stream = Stream.drop_front(4);
23 uint32_t Len = llvm::support::endian::read32le(Stream.take_front(4).begin());
24 Stream = Stream.drop_front(4);
25 if (Stream.size() < Len)
26 return error(
"truncated chunk: want {0}, got {1}", Len, Stream.size());
27 C.Data = Stream.take_front(Len);
28 Stream = Stream.drop_front(Len);
29 if ((Len % 2) && !Stream.empty()) {
31 return error(
"nonzero padding byte");
32 Stream = Stream.drop_front();