unsigned long object_ids;
unsigned long timestamps;
unsigned long case_sensitive_filenames;
+ unsigned long xattrs;
};
struct blob_descriptor;
unsigned long num_blobs_remaining;
struct list_head blob_list;
const struct read_blob_callbacks *saved_cbs;
- struct blob_descriptor *cur_blob;
- u64 cur_blob_offset;
struct filedes tmpfile_fd;
tchar *tmpfile_name;
unsigned int count_until_file_progress;
/* Maximum number of UNIX file descriptors, NTFS attributes, or Windows file
* handles that can be opened simultaneously to extract a blob to multiple
* destinations. */
+#ifndef __APPLE__
#define MAX_OPEN_FILES 512
+#else /* !__APPLE__ */
+/* With macOS, reduce to 128 because the default value for ulimit -n is 256 */
+#define MAX_OPEN_FILES 128
+#endif /* __APPLE__ */
static inline int
extract_progress(struct apply_ctx *ctx, enum wimlib_progress_msg msg)
return call_progress(ctx->progfunc, msg, &ctx->progress, ctx->progctx);
}
-extern int
+int
do_file_extract_progress(struct apply_ctx *ctx, enum wimlib_progress_msg msg);
#define COUNT_PER_FILE_PROGRESS 256
return 0;
}
-extern int
+int
start_file_structure_phase(struct apply_ctx *ctx, u64 end_file_count);
-extern int
+int
start_file_metadata_phase(struct apply_ctx *ctx, u64 end_file_count);
/* Report that a file was created, prior to blob extraction. */
return maybe_do_file_progress(ctx, WIMLIB_PROGRESS_MSG_EXTRACT_METADATA);
}
-extern int
+int
end_file_structure_phase(struct apply_ctx *ctx);
-extern int
+int
end_file_metadata_phase(struct apply_ctx *ctx);
static inline int
return report_error(ctx->progfunc, ctx->progctx, error_code, path);
}
+bool
+detect_sparse_region(const void *data, size_t size, size_t *len_ret);
+
+static inline bool
+maybe_detect_sparse_region(const void *data, size_t size, size_t *len_ret,
+ bool enabled)
+{
+ if (!enabled) {
+ /* Force non-sparse without checking */
+ *len_ret = size;
+ return false;
+ }
+ return detect_sparse_region(data, size, len_ret);
+}
+
#define inode_first_extraction_dentry(inode) \
((inode)->i_first_extraction_alias)
dentry != NULL; \
dentry = dentry->d_next_extraction_alias)
-extern int
+int
extract_blob_list(struct apply_ctx *ctx, const struct read_blob_callbacks *cbs);
/*
bool single_tree_only;
};
-#ifdef __WIN32__
+#ifdef _WIN32
extern const struct apply_operations win32_apply_ops;
#else
extern const struct apply_operations unix_apply_ops;