+extern int
+do_file_extract_progress(struct apply_ctx *ctx, enum wimlib_progress_msg msg);
+
+static inline int
+maybe_do_file_progress(struct apply_ctx *ctx, enum wimlib_progress_msg msg)
+{
+ if (unlikely(!--ctx->count_until_file_progress))
+ return do_file_extract_progress(ctx, msg);
+ return 0;
+}
+
+/* Call this to reset the counter for report_file_created() and
+ * report_file_metadata_applied(). */
+static inline void
+reset_file_progress(struct apply_ctx *ctx)
+{
+ ctx->count_until_file_progress = 1;
+}
+
+/* Report that a file was created, prior to stream extraction. */
+static inline int
+report_file_created(struct apply_ctx *ctx)
+{
+ return maybe_do_file_progress(ctx, WIMLIB_PROGRESS_MSG_EXTRACT_FILE_STRUCTURE);
+}
+
+/* Report that file metadata was applied, after stream extraction. */
+static inline int
+report_file_metadata_applied(struct apply_ctx *ctx)
+{
+ return maybe_do_file_progress(ctx, WIMLIB_PROGRESS_MSG_EXTRACT_METADATA);
+}
+