- if (object_stream)
- finish_object();
-
- // Write out the object table which gives the sizes and locations of all
- // objects, and then add the trailing signature, which indicates the end of
- // the segment and gives the offset of the object table.
- int64_t index_offset = out->get_pos();
-
- for (object_table::const_iterator i = objects.begin();
- i != objects.end(); ++i) {
- out->write_s64(i->offset);
- out->write_s64(i->size);
- out->write(i->type, sizeof(i->type));
- }
-
- static const char signature2[] = "LBSEND";
- out->write(signature2, strlen(signature2));
- out->write_s64(index_offset);
- out->write_u32(objects.size());
-
- /* Finally, append a checksum to the end of the file, so that its integrity
- * (against accidental, not malicious, corruption) can be verified. */
- const uint8_t *csum = out->finish_and_checksum();
- raw_out->write(csum, out->checksum_size());