return ret;
}
+static int
+is_stream_packed(struct wim_lookup_table_entry *lte, void *_ignore)
+{
+ return lte_is_partial(lte);
+}
+
+static bool
+wim_has_packed_streams(WIMStruct *wim)
+{
+ return for_lookup_table_entry(wim->lookup_table, is_stream_packed, NULL);
+}
+
static int
wim_write_stream_list(WIMStruct *wim,
struct list_head *stream_list,
write_resource_flags = write_flags_to_resource_flags(write_flags);
- /* wimlib v1.6.3: pack streams by default if the WIM version number is
- * that usually used in solid archives. */
- if (wim->hdr.wim_version == WIM_VERSION_PACKED_STREAMS)
+ /* wimlib v1.6.3: pack streams by default if the WIM version has been
+ * set to WIM_VERSION_PACKED_STREAMS and at least one stream in the
+ * WIM's lookup table is located in a packed resource (may be the same
+ * WIM, or a different one in the case of export). */
+ if (wim->hdr.wim_version == WIM_VERSION_PACKED_STREAMS &&
+ wim_has_packed_streams(wim))
+ {
write_resource_flags |= WRITE_RESOURCE_FLAG_PACK_STREAMS;
+ }
if (write_resource_flags & WRITE_RESOURCE_FLAG_PACK_STREAMS) {
out_chunk_size = wim->out_pack_chunk_size;
* @stream_list_ret.
*
* SKIP_EXTERNAL_WIMS: Streams already present in a WIM file, but not
- * @wim, shall be be returned in neither @stream_list_ret nor
+ * @wim, shall be returned in neither @stream_list_ret nor
* @lookup_table_list_ret.
*
* @stream_list_ret
DEBUG("Number of threads: %u", num_threads);
DEBUG("Progress function: %s", (progress_func ? "yes" : "no"));
DEBUG("Stream list: %s", (stream_list_override ? "specified" : "autodetect"));
- DEBUG("GUID: %s", (guid ||
- (write_flags & WIMLIB_WRITE_FLAG_RETAIN_GUID)) ?
- "explicit" : "generate new");
+ DEBUG("GUID: %s", (write_flags &
+ WIMLIB_WRITE_FLAG_RETAIN_GUID) ? "retain"
+ : guid ? "explicit" : "generate new");
/* Internally, this is always called with a valid part number and total
* parts. */
/* Set chunk size if different. */
wim->hdr.chunk_size = wim->out_chunk_size;
- /* Use GUID if specified; otherwise generate a new one. */
- if (guid)
- memcpy(wim->hdr.guid, guid, WIMLIB_GUID_LEN);
- else if (!(write_flags & WIMLIB_WRITE_FLAG_RETAIN_GUID))
- randomize_byte_array(wim->hdr.guid, WIMLIB_GUID_LEN);
+ /* Set GUID. */
+ if (!(write_flags & WIMLIB_WRITE_FLAG_RETAIN_GUID)) {
+ if (guid)
+ memcpy(wim->hdr.guid, guid, WIMLIB_GUID_LEN);
+ else
+ randomize_byte_array(wim->hdr.guid, WIMLIB_GUID_LEN);
+ }
/* Clear references to resources that have not been written yet. */
zero_reshdr(&wim->hdr.lookup_table_reshdr);
* Integrity table (optional) (variable size)
*
* This method allows an image to be appended to a large WIM very quickly, and
- * is is crash-safe except in the case of write re-ordering, but the
+ * is crash-safe except in the case of write re-ordering, but the
* disadvantage is that a small hole is left in the WIM where the old lookup
* table, xml data, and integrity table were. (These usually only take up a
* small amount of space compared to the streams, however.)