Fix creating large solid blocks
authorEric Biggers <ebiggers3@gmail.com>
Thu, 5 Jun 2014 03:19:18 +0000 (22:19 -0500)
committerEric Biggers <ebiggers3@gmail.com>
Thu, 5 Jun 2014 03:19:18 +0000 (22:19 -0500)
Dumb bug that only appeared when at least 4 GiB of data was being
archived...!

NEWS
src/write.c

diff --git a/NEWS b/NEWS
index 89157eb..b703f8a 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,10 @@
 Only the most important changes more recent than version 0.6 are noted here.
 
 Version 1.7.0-BETA:
 Only the most important changes more recent than version 0.6 are noted here.
 
 Version 1.7.0-BETA:
-       Improved compatibility with version 3584 WIM / ESD files.
+       Improved compatibility with version 3584 WIM / ESD files:
+           - Add support for reading and writing multiple solid blocks per
+             archive, which WIMGAPI/DISM can create when appending an image.
+           - Correctly create solid blocks larger than 4 GiB.
 
        Performance improvements, including for extraction.
 
 
        Performance improvements, including for extraction.
 
index 5217838..aa3585a 100644 (file)
@@ -451,7 +451,7 @@ begin_chunk_table(struct write_streams_ctx *ctx, u64 res_expected_size)
                reserve_size = expected_num_chunk_entries *
                               get_chunk_entry_size(res_expected_size,
                                                    0 != (ctx->write_resource_flags &
                reserve_size = expected_num_chunk_entries *
                               get_chunk_entry_size(res_expected_size,
                                                    0 != (ctx->write_resource_flags &
-                                                         WIM_RESHDR_FLAG_PACKED_STREAMS));
+                                                         WRITE_RESOURCE_FLAG_PACK_STREAMS));
                if (ctx->write_resource_flags & 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 & WRITE_RESOURCE_FLAG_PACK_STREAMS)
                        reserve_size += sizeof(struct alt_chunk_table_header_disk);
                memset(ctx->chunk_csizes, 0, reserve_size);
@@ -499,7 +499,7 @@ end_chunk_table(struct write_streams_ctx *ctx, u64 res_actual_size,
 
        chunk_entry_size = get_chunk_entry_size(res_actual_size,
                                                0 != (ctx->write_resource_flags &
 
        chunk_entry_size = get_chunk_entry_size(res_actual_size,
                                                0 != (ctx->write_resource_flags &
-                                                     WIM_RESHDR_FLAG_PACKED_STREAMS));
+                                                     WRITE_RESOURCE_FLAG_PACK_STREAMS));
 
        typedef le64 __attribute__((may_alias)) aliased_le64_t;
        typedef le32 __attribute__((may_alias)) aliased_le32_t;
 
        typedef le64 __attribute__((may_alias)) aliased_le64_t;
        typedef le32 __attribute__((may_alias)) aliased_le32_t;