#include "wimlib/lookup_table.h"
#include "wimlib/metadata.h"
#include "wimlib/resource.h"
+#include "wimlib/win32.h"
#include "wimlib/write.h"
#include "wimlib/xml.h"
lte->out_res_offset_in_wim = rspec->offset_in_wim;
lte->out_res_size_in_wim = rspec->size_in_wim;
- lte->out_res_uncompressed_size = rspec->uncompressed_size;
+ /*lte->out_res_uncompressed_size = rspec->uncompressed_size;*/
} else {
wimlib_assert(!(lte->flags & WIM_RESHDR_FLAG_PACKED_STREAMS));
u32 reshdr_flags;
int ret;
- stream_hdr.magic = PWM_STREAM_MAGIC;
+ stream_hdr.magic = cpu_to_le64(PWM_STREAM_MAGIC);
stream_hdr.uncompressed_size = cpu_to_le64(lte->size);
if (additional_reshdr_flags & PWM_RESHDR_FLAG_UNHASHED) {
zero_out_hash(stream_hdr.hash);
};
static u64
-get_chunk_entry_size(u64 res_size)
+get_chunk_entry_size(u64 res_size, int write_resource_flags)
{
- if (res_size <= UINT32_MAX)
+ if (res_size <= UINT32_MAX ||
+ (write_resource_flags & WIM_RESHDR_FLAG_PACKED_STREAMS))
return 4;
else
return 8;
* prove to be needed. At this point, we just use @chunk_csizes
* for a buffer of 0's because the actual compressed chunk sizes
* are unknown. */
- reserve_size = expected_num_chunk_entries * get_chunk_entry_size(res_expected_size);
+ reserve_size = expected_num_chunk_entries *
+ get_chunk_entry_size(res_expected_size,
+ ctx->write_resource_flags);
if (ctx->write_resource_flags & WIMLIB_WRITE_RESOURCE_FLAG_PACK_STREAMS)
reserve_size += sizeof(struct alt_chunk_table_header_disk);
memset(ctx->chunk_csizes, 0, reserve_size);
if (!(ctx->write_resource_flags & WIMLIB_WRITE_RESOURCE_FLAG_PACK_STREAMS))
actual_num_chunk_entries--;
- chunk_entry_size = get_chunk_entry_size(res_actual_size);
+ chunk_entry_size = get_chunk_entry_size(res_actual_size,
+ ctx->write_resource_flags);
typedef le64 __attribute__((may_alias)) aliased_le64_t;
typedef le32 __attribute__((may_alias)) aliased_le32_t;
lte->out_reshdr.offset_in_wim = offset_in_res;
lte->out_res_offset_in_wim = reshdr.offset_in_wim;
lte->out_res_size_in_wim = reshdr.size_in_wim;
- lte->out_res_uncompressed_size = reshdr.uncompressed_size;
+ /*lte->out_res_uncompressed_size = reshdr.uncompressed_size;*/
offset_in_res += lte->size;
}
wimlib_assert(offset_in_res == reshdr.uncompressed_size);
if (lte2->out_reshdr.flags & WIM_RESHDR_FLAG_PACKED_STREAMS)
return -1;
}
- return cmp_u64(lte1->out_reshdr.offset_in_wim,
+ return cmp_u64(lte1->out_reshdr.offset_in_wim,
lte2->out_reshdr.offset_in_wim);
}
return false;
if (wim->chunk_size != wim->out_chunk_size)
return false;
+ } else {
+ if (write_flags & WIMLIB_WRITE_FLAG_NO_PACK_STREAMS)
+ return false;
}
return true;