/* Reads the header from a WIM file. */
int
-read_header(const tchar *filename, int in_fd,
- struct wim_header *hdr, int open_flags)
+read_header(const tchar *filename, int in_fd, struct wim_header *hdr)
{
struct wim_header_disk disk_hdr _aligned_attribute(8);
return WIMLIB_ERR_INVALID_PART_NUMBER;
}
- if (!(open_flags & WIMLIB_OPEN_FLAG_SPLIT_OK) && hdr->total_parts != 1)
- {
- ERROR("\"%"TS"\": This WIM is part %u of a %u-part WIM",
- filename, hdr->part_number, hdr->total_parts);
- return WIMLIB_ERR_SPLIT_UNSUPPORTED;
- }
-
hdr->image_count = le32_to_cpu(disk_hdr.image_count);
DEBUG("part_number = %u, total_parts = %u, image_count = %u",
return 0;
}
+/* Update just the wim_flags field. */
+int
+write_header_flags(u32 hdr_flags, int out_fd)
+{
+ le32 flags = cpu_to_le32(hdr_flags);
+ if (full_pwrite(out_fd, &flags, sizeof(flags),
+ offsetof(struct wim_header_disk, wim_flags)) != sizeof(flags))
+ {
+ return WIMLIB_ERR_WRITE;
+ } else {
+ return 0;
+ }
+
+}
+
+/* Update just the part_number and total_parts fields. */
+int
+write_header_part_data(u16 part_number, u16 total_parts, int out_fd)
+{
+ le16 part_data[2] = {
+ cpu_to_le16(part_number),
+ cpu_to_le16(total_parts),
+ };
+ if (full_pwrite(out_fd, &part_data, sizeof(part_data),
+ offsetof(struct wim_header_disk, part_number)) != sizeof(part_data))
+ {
+ return WIMLIB_ERR_WRITE;
+ } else {
+ return 0;
+ }
+}
+
/*
* Initializes the header for a WIM file.
*/