#ifdef HAVE_ALLOCA_H
#include <alloca.h>
+#else
+#include <stdlib.h>
#endif
-
/* Reopens the FILE* for a WIM read-write. */
static int reopen_rw(WIMStruct *w)
{
#else
ret = prepare_resource_for_read(next_lte);
#endif
+ if (ret != 0)
+ goto out;
DEBUG("Initializing buffers for uncompressed "
"and compressed data (%zu bytes needed)",
}
}
+ // This loop is executed until all resources have been written, except
+ // possibly a few that have been added to the @my_resources list for
+ // writing later.
while (1) {
// Send chunks to the compressor threads until either (a) there
// are no more messages available since they were all sent off,
DEBUG2("Complete msg (begin_chunk=%"PRIu64")", msg->begin_chunk);
if (msg->begin_chunk == 0) {
DEBUG2("Begin chunk tab");
-
-
-
if (write_flags & WIMLIB_WRITE_FLAG_SHOW_PROGRESS) {
show_stream_write_progress(&cur_size,
&next_size,
#endif
if (ret == 0) {
list_for_each_entry(lte, &my_resources, staging_list) {
- ret = write_wim_resource(lte, out_fp,
- out_ctype,
- <e->output_resource_entry,
- 0);
- if (ret != 0)
- break;
if (write_flags & WIMLIB_WRITE_FLAG_SHOW_PROGRESS) {
show_stream_write_progress(&cur_size,
&next_size,
&cur_percent,
lte);
}
+ ret = write_wim_resource(lte, out_fp,
+ out_ctype,
+ <e->output_resource_entry,
+ 0);
+ if (ret != 0)
+ break;
}
if (write_flags & WIMLIB_WRITE_FLAG_SHOW_PROGRESS)
finish_stream_write_progress(total_size);
return ret;
}
+
+static const char *get_data_type(int ctype)
+{
+ switch (ctype) {
+ case WIM_COMPRESSION_TYPE_NONE:
+ return "uncompressed";
+ case WIM_COMPRESSION_TYPE_LZX:
+ return "LZX-compressed";
+ case WIM_COMPRESSION_TYPE_XPRESS:
+ return "XPRESS-compressed";
+ }
+}
+
static int write_stream_list_parallel(struct list_head *stream_list,
FILE *out_fp, int out_ctype,
int write_flags, u64 total_size,
}
if (write_flags & WIMLIB_WRITE_FLAG_SHOW_PROGRESS) {
- printf("Writing compressed data using %u threads...\n",
- num_threads);
+ printf("Writing %s compressed data using %u threads...\n",
+ get_data_type(out_ctype), num_threads);
}
ret = main_writer_thread_proc(stream_list,
const char *reason = "";
if (!compression_needed)
reason = " (no compression needed)";
- printf("Writing data using 1 thread%s\n", reason);
+ printf("Writing %s data using 1 thread%s\n",
+ get_data_type(out_ctype), reason);
}
return write_stream_list_serial(stream_list, out_fp,