]> wimlib.net Git - wimlib/blobdiff - include/wimlib/apply.h
Use completed_streams and total_streams in extract progress
[wimlib] / include / wimlib / apply.h
index 72c21b5dbc06878edac7084e8340f8b860203e81..2f3b1cb941ab3b61a8821357f2cf2091d50a4f72 100644 (file)
@@ -1,7 +1,9 @@
 #ifndef _WIMLIB_APPLY_H
 #define _WIMLIB_APPLY_H
 
+#include "wimlib/file_io.h"
 #include "wimlib/list.h"
+#include "wimlib/progress.h"
 #include "wimlib/types.h"
 #include "wimlib.h"
 
@@ -46,7 +48,8 @@ struct apply_ctx {
        int extract_flags;
 
        /* User-provided progress function, or NULL if not specified.  */
-       wimlib_progress_func_t progress_func;
+       wimlib_progress_func_t progfunc;
+       void *progctx;
 
        /* Progress data buffer, with progress.extract initialized.  */
        union wimlib_progress_info progress;
@@ -64,8 +67,22 @@ struct apply_ctx {
        struct list_head stream_list;
        const struct read_stream_list_callbacks *saved_cbs;
        struct wim_lookup_table_entry *cur_stream;
+       u64 cur_stream_offset;
+       struct filedes tmpfile_fd;
+       tchar *tmpfile_name;
 };
 
+/* Maximum number of UNIX file descriptors, NTFS attributes, or Windows file
+ * handles that can be opened simultaneously to extract a single-instance
+ * stream to multiple destinations.  */
+#define MAX_OPEN_STREAMS 512
+
+static inline int
+extract_progress(struct apply_ctx *ctx, enum wimlib_progress_msg msg)
+{
+       return call_progress(ctx->progfunc, msg, &ctx->progress, ctx->progctx);
+}
+
 /* Returns any of the aliases of an inode that are being extracted.  */
 #define inode_first_extraction_dentry(inode)           \
        list_first_entry(&(inode)->i_extraction_aliases,        \