X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=include%2Fwimlib%2Fapply.h;h=2f3b1cb941ab3b61a8821357f2cf2091d50a4f72;hp=72c21b5dbc06878edac7084e8340f8b860203e81;hb=4c532e2a9f1a40e1c1a6ed44a50025cfbfab6e4f;hpb=cc7b6ee47d4037ae8fa11b4c2d5154091d543704 diff --git a/include/wimlib/apply.h b/include/wimlib/apply.h index 72c21b5d..2f3b1cb9 100644 --- a/include/wimlib/apply.h +++ b/include/wimlib/apply.h @@ -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, \