static int vhd_dump_headers(const char *name, int hex) { vhd_context_t vhd; libvhd_set_log_level(1); memset(&vhd, 0, sizeof(vhd)); printf("\n%s appears invalid; dumping headers\n\n", name); vhd.fd = open(name, O_DIRECT | O_LARGEFILE | O_RDONLY); if (vhd.fd == -1) return -errno; vhd.file = strdup(name); vhd_read_footer(&vhd, &vhd.footer, false); vhd_read_header(&vhd, &vhd.header); vhd_print_footer(&vhd.footer, hex); vhd_print_header(&vhd, &vhd.header, hex); close(vhd.fd); free(vhd.file); return 0; }
static int vhd_journal_add_header(vhd_journal_t *j) { int err; off64_t off; vhd_context_t *vhd; vhd_header_t header; vhd = &j->vhd; err = vhd_read_header(vhd, &header); if (err) return err; off = vhd->footer.data_offset; vhd_header_out(&header); err = vhd_journal_update(j, off, (char *)&header, sizeof(vhd_header_t), VHD_JOURNAL_ENTRY_TYPE_HEADER); return err; }